C language and compillos

Salut a tous, ça fait un bail que j’essaye de faire un bête hello word en C/C++
car si je ne me trompe, pour afficher un bete hello, c’est pareil.
bon, je tape donc sur mon ptit clavier les lettres correspondantes
#include
#include
main()
{
printf(« hello word ! »);
getch()
}
VC6 aime pas
Borland non plus
Gcc sous linux non plus ( :stuck_out_tongue: )
Mais un ptit freeware ( Dev-C++ ) lui ça lui convient.

Alors je me demande pourquoi d’un compillo a l’autre il y a tant de divergeance, je pense quand meme avoir fait la bonne procédure …
compiller/construire/executer
Si vous voyez quelque chose …
non que j’ai une preference pour l’un ou pour l’autre, mais je voudrais savoir !
Ce message a été édité par fser le 28/05/2004

C’est quoi les messages d’erreurs ? Et puis l’absence de ‘;’ à la fin du getch() j’imagine que c’est une erreur de copier coller sans quoi…

Je présume que les stdlib.h et stdio.h qui manquent c’est du à un bug des balises html ?

Sinon, effectivement le ; à la fin du getch().

Et puis on écrit normalement int main(int argc, char * argv[]) {} pour le C normalisé il me semble… Donc t’as plus de chances que ça fonctionne en respectant cette syntaxe. Et ajouter un return 0; aussi à la fin du coup.

le ‹ ; › manquant je viens de l’oublier
Appelle de fonctions non definies ( borland : qui nb saoul avec sa feuille graphique, pas moyen de la virer ? pour faire un hello … )
et dans VC il aime pas ( pour reprendre cet exemple ) le } en derniere ligne.
désolé du temps, j’avais pas noté les erreurs.

les libs manquantes sont stdio.h et conio.h
c’est un peu le bordel apres les declarations pour ton main :stuck_out_tongue:
c’est qui tout ce ptit monde ? car je suppose qu’il change en fction du type d’applic …
Ce message a été édité par fser le 28/05/2004

ça marche avec le return 0 ! merci …
hello word => press => “appuyez sur une touche pour continuer”.

Bon, j’ai une autre question …
On dit que le C est portable d’une plateforme a l’autre, mais ça necessite une recompilation pour qu’il se lance sous linux par exemple non ?

[quote][…]
Bon, j’ai une autre question …
On dit que le C est portable d’une plateforme a l’autre, mais ça necessite une recompilation pour qu’il se lance sous linux par exemple non ?[/quote]Le code C peut être portable entre OS pas le binaire (sauf en utilisant un émulateur). Donc il faut recompiler oui…

quote
c’est un peu le bordel apres les declarations pour ton main :stuck_out_tongue:
c’est qui tout ce ptit monde ? car je suppose qu’il change en fction du type d’applic …[/quote]Nope toute déclaration de main, que ca soit en C ou en C++, console ou pas, se fait normalement en :

int main(int argc, char** argv)
voire
int main(int argc, char* argv[])
ce qui reviens a peu près au même. Maintenant : argc → Nombre d’arguments de ligne de commande. argv → les dits arguments. L’int retourné correspond au code de sortie du process.

C’est bien ce que je dis, c’est gore pour un debutant ( 4h de C a mon actif  ) en sachant qu’un bête main () marche.
Non, ce n’est pas de l’entetement, j’vous assure !

Bah ca devrais pas marcher, déja.

DIE compilos permissifs DIE !

A ce propos, le Toolkit VC++ MS est nickel, pour ca. Gros warnings et erreurs explicites.
Ma philosophie : toujours traiter les warnings comme des erreurs.[/quote]

la raison que ca compile pas sous Linux il me semble c’est que conio.h existe pas sous linux dans sa forme premiere (y a peut etre des portages, je sais pas) : http://www.digitalmars.com/rtl/conio.html
Tu peux utiliser un scanf() a la place (edit : ou cin en c++).

Sinon je pense pas que le truc derriere le main soit obligatoire dans le cas ou tu ne les utilises pas, enfin moi ca ne m’a jamais posé de probleme. D’ailleurs t’es même pas obligé d’appeler ca argc et argv, il suffit que ce soit un int et un char* (un string quoi)

Ce message a été édité par Staz le 29/05/2004

Die >> undefined << Die !!!
Euh, je disais que j’avais fini une calculette en C et que je voulais vous la montrer, mais bogue.
Et aussi, que j’etais a la recherche d’un truc ( doc, site cerveau, boukin ( lequel ? comment choisir ?)) pour ajouter une interface a mon super-calculateur.
merci d’vot patience

[quote]Bah ca devrais pas marcher, déja.

DIE compilos permissifs DIE ![/quote]Non, ca ne vient pas d’un compilo permissif, c’est normal que ca marche, c’est dans la norme.
Les parentheses vides ca veut pas dire que la fonction ne prend pas d’arguments, ca veut juste dire qu’on ne sait pas ce qu’elle prend en argument (ou qu’on s’en fou). Quand on veut une fonction qui ne prend rien, on precise ‘void’.
De toute facon main prend soit 0 soit 2 arguments, donc main(void) serait bon aussi.

[quote][quote] Bah ca devrais pas marcher, déja.

DIE compilos permissifs DIE ![/quote]Non, ca ne vient pas d’un compilo permissif, c’est normal que ca marche, c’est dans la norme.
Les parentheses vides ca veut pas dire que la fonction ne prend pas d’arguments, ca veut juste dire qu’on ne sait pas ce qu’elle prend en argument (ou qu’on s’en fou). Quand on veut une fonction qui ne prend rien, on precise ‘void’.
De toute facon main prend soit 0 soit 2 arguments, donc main(void) serait bon aussi.[/quote]Oui, je suis d’accord pour les arguments. Par contre, je suis choqué par l’absence de type devant la fonction. 
un int main() ou void main() ne me choque pas, t’as tout a fait le droit de pas vouloir des args, par contre, une fonction en C++ a toujours un type de renvoi (ou void).

Au passage : On peux pas vraiment parler de “Norme”, car la déclaration de l’entry-point dépends de toutes facons de la plateforme ciblée.
Ce message a été édité par Tzim le 29/05/2004

[quote]Oui, je suis d’accord pour les arguments. Par contre, je suis choqué par l’absence de type devant la fonction. 
[/quote]Oui, je ne parlait que des arguments.

[quote]un int main() ou void main() ne me choque pas,[/quote]Ben en fait le “void main()” n’est pas bon, le type de retour de main doit forcement etre un int (ou typedef sur int).

Au passage : On peux pas vraiment parler de "Norme", car la déclaration de l'entry-point dépends de toutes facons de la plateforme ciblée.[/quote]Si si, ils en parlent dans la [url="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n843.htm"]norme[/url] ISO, si le prototype de main etait different sur chaque plateforme ca serait pas pratique.

Oups, pourtant ce n’est pas une norme universelle alors :

int WINAPI WinMain( HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpCmdLine,  
  int nCmdShow )  

M’enfin bon vous allez encore dire que c’est MS qui fout la zone (et vous aurez pas tout à fait tord )

Si je me souviens bien, l’exemple du “Hello World” dans le K&R contient juste un main() sans type de retour, mais les auteurs précisent bien que c’est par souci de simplification et que le main doit retourner le statut du programme à l’environnement.

[quote]Si je me souviens bien, l’exemple du “Hello World” dans le K&R contient juste un main() sans type de retour, mais les auteurs précisent bien que c’est par souci de simplification et que le main doit retourner le statut du programme à l’environnement.[/quote]En fait la plupars des compilateurs conciderent que que quand le type de retour n’est pas precise, c’est un int (pour garder la compatibilite avec des vieux codes sources qui etaient ecrits comme ca), mais ils ne sont pas obliges de le faire (et en general affichent un warning).

[quote]En fait la plupars des compilateurs conciderent que que quand le type de retour n’est pas precise, c’est un int (pour garder la compatibilite avec des vieux codes sources qui etaient ecrits comme ca), mais ils ne sont pas obliges de le faire (et en general affichent un warning).[/quote] Et comme de toute manière, tous les signaux POSIX sont des entiers, et que les gens biens respectent la norme…
int main(int argc, char *argv[])
…est préférable :>

De toute manière, c’est question de goût/pratique, et d’habitudes de programmation !

Edit : au demeurant, conio.h est s’il me semble bien le header pour les fonctions commandline du C sous Windows/DOS.

Ce message a été édité par Ainulindalë le 30/05/2004