[C] La bonne écriture d'un hello world ?

La bonne écriture d'un hello world ? [C] - C - Programmation

Marsh Posté le 17-10-2003 à 19:56:44    

En lisant des pdf, livres et tout ça, à chaque fois, on obtient un code différent pour un simple hello world.  
Par exemple, yen a certains qui vont écrire :
 

Code :
  1. int main()
  2. {
  3. printf("prout\n" );
  4. }


 
D'autres  :
 

Code :
  1. int main(void)
  2. {
  3. printf("prout\n" );
  4. }


 
D'autres encore comme ceci :
 

Code :
  1. main()
  2. {
  3. printf("prout\n" );
  4. }


 
C'est lourd parce que je sais pas laquelle est la meilleure, laquelle est la plus "aux normes". Et tiens en parlant de norme il me semble que c'est en partie du à ça qu'on a droit à plusieurs écriture (genre la dernière doit être "dépassée" non ?)
 
Pour finir, ya t-il un livre en C qui respecte ces choses là (dans le sens ayant un code aux "normes" ) ?


Message édité par vanilla le 17-10-2003 à 19:58:44
Reply

Marsh Posté le 17-10-2003 à 19:56:44   

Reply

Marsh Posté le 17-10-2003 à 19:59:42    

la première c'est la bonne, la deuxième est correcte, la troisième pue.

Reply

Marsh Posté le 17-10-2003 à 20:13:22    

la seconde n'est pas correcte puisque le compilo émettra un warning. Manque un return 0; de bon [:aloy]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 17-10-2003 à 20:23:02    

drasche a écrit :

la seconde n'est pas correcte puisque le compilo émettra un warning. Manque un return 0; de bon [:aloy]

la première est la bonne. le return 0; est optionnel en C99, nécessaire en ANSI

Reply

Marsh Posté le 17-10-2003 à 20:23:54    

drasche a écrit :

la seconde n'est pas correcte puisque le compilo émettra un warning. Manque un return 0; de bon [:aloy]


et pas la première?:o

Reply

Marsh Posté le 17-10-2003 à 20:27:51    

certes, je l'avais loupée :o


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 17-10-2003 à 20:28:08    

c pas :
 

Code :
  1. void main(void)
  2. {
  3.    printf("bouh" );
  4. }


 
en C :??:

Reply

Marsh Posté le 17-10-2003 à 20:29:11    

C99 impose int comme retour à main. ton code n'est ni ansi ni C99 au sens strict

Reply

Marsh Posté le 17-10-2003 à 20:29:58    

MagicBuzz a écrit :

c pas :
 

Code :
  1. void main(void)
  2. {
  3.    printf("bouh" );
  4. }


 
en C :??:


 
disons qu'il faut pas avoir envie de tester le code retour de ton prog dans ton exemple  :D

Reply

Marsh Posté le 17-10-2003 à 20:31:29    

Taz a écrit :

C99 impose int comme retour à main. ton code n'est ni ansi ni C99 au sens strict


ça tu t'en fout.
 
mon exemple est le seul à faire un réel hello world : il se contente d'afficher un truc à l'écran, point barre.
 
si ça retourne un int, alors le prog ne se contente plus d'afficher un truc à l'écran, puisqu'il retourne une valeur en plus...

Reply

Marsh Posté le 17-10-2003 à 20:31:29   

Reply

Marsh Posté le 17-10-2003 à 20:32:55    

[:popcorn]
 
edit: zut je me souviens plus du code du smiley pour assister aux débats qui s'annoncent passionnants :D


Message édité par antp le 17-10-2003 à 20:33:43

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-10-2003 à 20:33:50    

MagicBuzz a écrit :


ça tu t'en fout.
 
mon exemple est le seul à faire un réel hello world : il se contente d'afficher un truc à l'écran, point barre.
 
si ça retourne un int, alors le prog ne se contente plus d'afficher un truc à l'écran, puisqu'il retourne une valeur en plus...


:heink:
Donc tu préfères un truc non standard qui fait exactement ce que tu veux qu'un truc standard qui marche?

Reply

Marsh Posté le 17-10-2003 à 20:34:09    

antp a écrit :

[:popcorn]
 
edit: zut je me souviens plus du code du smiley pour assister aux débats qui s'annoncent passionnants :D


ah toi aussi? :D


Message édité par drasche le 17-10-2003 à 20:34:28

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 17-10-2003 à 20:35:32    

d'un autre côté c'est vendredi. seul truc bizarre, nraynaud n'a pas sortit son smiley fétiche :o

Reply

Marsh Posté le 17-10-2003 à 20:38:24    

j'ai jamais compris pourquoi on ecrivait le hello world avec C avec printf d'ailleurs, alors qu'un puts et bien plus simple/efficace

Reply

Marsh Posté le 17-10-2003 à 20:51:25    

skeye a écrit :


:heink:
Donc tu préfères un truc non standard qui fait exactement ce que tu veux qu'un truc standard qui marche?


S'il s'agit de faire un exemple le plus basique possible dans l'esprit du hello world, oui.
Quand t'apprends à développer, avant de connaître chaque ligne des normes ANSI, ISO ou POSIX, t'apprends déjà les rudiments. Et indiquer un type de retour (et faire un return par dessus le marché) y'a rien de mieu pour que le newbie en puissance comprenne rien au 2 lignes de code inutiles... Surtout que sur 3 lignes, 2 lignes inutiles ça commence à faire un bon ratio.
Il manquerait plus que tu t'amuses en plus à écrire Hello Word en UTF-8 pour être 100% au top des normes.


Message édité par MagicBuzz le 17-10-2003 à 20:53:36
Reply

Marsh Posté le 17-10-2003 à 20:53:38    

Pourquoi tu mets un "void" inutile en param alors ? :D
 
En UTF8 "Hello Word" s'écrit "Hello World", non ? Y a rien de plus...


Message édité par antp le 17-10-2003 à 20:54:12

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-10-2003 à 20:56:17    

parceque sur certains (vieux peut-être) compilos il est obligatoire de spécifier quand une fonction ne retourne rien.
Et c'est moins déroutant d'expliquer en 4 lignes qu'on met void dedans parceque le main ne fait rien, que d'expliquer 25 pages plus loin que parfois on met pas de type de retour parcequ'on retourne rien.
 
Je préfère lire explicitement que je retourne rien plutôt que de lire une fonction où un mec à visiblement oublié de spécifier le type retourné. Si void sur un main n'est pas ANSI, alors j'espère bien qu'une procédure sans void ne l'est pas non plus.

Reply

Marsh Posté le 17-10-2003 à 20:56:31    

non, pas inutile en C. c'est la une connerie. () veut dire autant de paramètre que l'on veut (inaccessibles). quand les gars ont voulu normaliser tout ça, des cons ont gueulés que () ne ressemblait pas a une synthaxe pour dire "pas de paramètres" contrairement à (void) ... et c'est passé, quelle merde ...
 
heureusement le wc21 du C++ n'a pas fait cette idiotie, donc a contrario, () et (void) signifie pas de paramètres

Reply

Marsh Posté le 17-10-2003 à 20:57:00    

antp a écrit :

Pourquoi tu mets un "void" inutile en param alors ? :D
 
En UTF8 "Hello Word" s'écrit "Hello World", non ? Y a rien de plus...  


Sauf que t'appelles un peu pas printf qui retourne du ANSI, c'est à dire du ASCII étendu localisé.

Reply

Marsh Posté le 17-10-2003 à 20:57:13    

MagicBuzz a écrit :

parceque sur certains (vieux peut-être) compilos il est obligatoire de spécifier quand une fonction ne retourne rien.
Et c'est moins déroutant d'expliquer en 4 lignes qu'on met void dedans parceque le main ne fait rien, que d'expliquer 25 pages plus loin que parfois on met pas de type de retour parcequ'on retourne rien.
 
Je préfère lire explicitement que je retourne rien plutôt que de lire une fonction où un mec à visiblement oublié de spécifier le type retourné. Si void sur un main n'est pas ANSI, alors j'espère bien qu'une procédure sans void ne l'est pas non plus.

t'es un peu à côté de la plaque ...

Reply

Marsh Posté le 17-10-2003 à 20:59:19    

Taz a écrit :

t'es un peu à côté de la plaque ...


en quoi ? (pour le coup des params, oui, je croyais qu'il parlais du void de retour, qui est facultatif, et qui selon moi ne le devrait pas)


Message édité par MagicBuzz le 17-10-2003 à 20:59:29
Reply

Marsh Posté le 17-10-2003 à 21:07:56    

Taz a écrit :

non, pas inutile en C.


 
ha mince :D
bon je te laisse parler pour la suite alors


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-10-2003 à 21:12:24    

MagicBuzz a écrit :


en quoi ? (pour le coup des params, oui, je croyais qu'il parlais du void de retour, qui est facultatif, et qui selon moi ne le devrait pas)

ben il n'est pas facultatif ... ça doit faire depuis 83 que int n'est plus te type par défaut en C ...

Reply

Marsh Posté le 17-10-2003 à 21:21:51    

Ok donc c'est la première. Mais par exemple je viens de choper ça sur le net
 

Code :
  1. #include <stdio.h>  /* directives au préprocesseur */
  2. #define DEBUT -10
  3. #define FIN 10
  4. #define MSG "Programme de démonstration\n";
  5. int carre(int x);   /* déclaration des fonctions */
  6. int cube(int x);
  7. main()              /* programme principal */
  8. {                   /* début du bloc de la fonction main */
  9.   int i;            /* définition des variables locales */
  10.   printf(MSG);
  11.   for ( i = DEBUT; i <= FIN ; i++ )
  12.   { 
  13.      printf("%d   carré: %d   cube: %d\n", i
  14.                                          , carre(i)
  15.                                          , cube(i) );
  16.   }                 /* fin du bloc for  */
  17.   return 0;
  18. }                   /* fin du bloc de la fonction main */


 
Son main() ici n'est donc pas bon là ?
Faudrait rajouter un int devant ?

Reply

Marsh Posté le 17-10-2003 à 21:24:38    

Ils sont beau les boulets avec leur langage de merde.
26 réponses pour un hello world !
et après c'est les mêmes qui pondent le joli code de  
http://cvs.sourceforge.net/viewcvs [...] &view=auto
 
D'ailleur ces mêmes gars sont en train de pondre un module noyau, ça va être beau !

Reply

Marsh Posté le 17-10-2003 à 23:34:50    

manque pas un  

Code :
  1. #include <stdio.h>


 
au fait ?

Reply

Marsh Posté le 18-10-2003 à 00:20:19    

Oui évidemment et aussi le return pour faire plus correct encore mais c'était uniquement sur le int main() que je voulais avoir des précisions.

Reply

Marsh Posté le 18-10-2003 à 01:03:26    

T'as un bouquin : Le Langage C norme ANSI de Kernighan B. W. & Ritchie D. M.
 
sinon je dirais que ca serait:
 

Code :
  1. #include<stdio.h>
  2. int main() 
  3. {
  4. printf("prout\n" );
  5. return 0;
  6. }

 
 
Le return d'une valeur indique juste si le programme s'est execute jusqu'au bout sans problemes ou pas...
 
enfin t'as qu'a compiler avec gcc avec les options -ANSI pour suivre les normes


Message édité par hazar le 18-10-2003 à 01:18:26
Reply

Marsh Posté le 18-10-2003 à 03:23:38    

Hazar a écrit :

T'as un bouquin : Le Langage C norme ANSI de Kernighan B. W. & Ritchie D. M.
 
sinon je dirais que ca serait:
 

Code :
  1. #include<stdio.h>
  2. int main() 
  3. {
  4. printf("prout\n" );
  5. return 0;
  6. }

 
 
Le return d'une valeur indique juste si le programme s'est execute jusqu'au bout sans problemes ou pas...
 
enfin t'as qu'a compiler avec gcc avec les options -ANSI pour suivre les normes


 
D'ailleurs si on veut titiller avec la norme ansi, on se rapprocherait plus de :
 

Code :
  1. int     main(int argc, char *argv[])
  2. {
  3. ..
  4. return 0;
  5. }


( ou

Code :
  1. char **argv

, selon :) )

Reply

Marsh Posté le 18-10-2003 à 03:53:59    

moi ce qui m'étonnes c'est pourquoi utiliser printf() là ou puts() suffit :D

Reply

Marsh Posté le 18-10-2003 à 03:54:02    

En fait la signature de main c'est même :

Code :
  1. int
  2. main(int argc, char *argv[], char *envp[])
  3. {
  4. }


 
J'en profite pour rappeler l'intéret de placer le nom de la fonction en colone 0, avec le type retourné (et les autres mots clés du genre « static ») sur un ligne a part : ça permet de chercher facilement la définition d'une fonction a coups de regexp (e.g ^main).


Message édité par matafan le 18-10-2003 à 03:58:04
Reply

Marsh Posté le 18-10-2003 à 04:43:37    

Matafan a écrit :


J'en profite pour rappeler l'intéret de placer le nom de la fonction en colone 0, avec le type retourné (et les autres mots clés du genre « static ») sur un ligne a part : ça permet de chercher facilement la définition d'une fonction a coups de regexp (e.g ^main).

Le gens normaux utilisent des générateurs de tags. Même en C ça existe. C'est largement plus précis vu que ça repose sur la grammaire.

Reply

Marsh Posté le 18-10-2003 à 05:05:16    

C'est tellement facile de mettre les noms de fonction a gauche et ça facilite tellement la vie... Tu ne fais jamais « less » pour jeter un coup d'oeil rapide sur un source ? Jamais un « grep » pour savoir dans quel fichier du répertoire est définie une fonctions ?
 
Sans compter que si tu bosses sur des giga de source et que tu cherche une fonction au nom anodin dans ton petit répertoire, les tags ou cscope ne vont pas beaucoup t'aider...

Reply

Marsh Posté le 18-10-2003 à 06:44:35    

En général, si le projet est gros et qu'il est en C j'y touche pas, chacun sa merde.
 
sinon, je fais des grep sans mettre de ^ devant le nom de la fonction et ça ne me dérange pas plus que ça. Par contre, j'ai horreur de lire un source qui est formaté comme tu le préconises.

Reply

Marsh Posté le 18-10-2003 à 11:09:36    

nraynaud a écrit :

En général, si le projet est gros et qu'il est en C j'y touche pas, chacun sa merde.
 
sinon, je fais des grep sans mettre de ^ devant le nom de la fonction et ça ne me dérange pas plus que ça. Par contre, j'ai horreur de lire un source qui est formaté comme tu le préconises.


 
plus de 50% du noyau linux est codé en C
 
et ça marche plutot bien  :jap:  
 
 
 
 
Hazar a écrit :
T'as un bouquin : Le Langage C norme ANSI de Kernighan B. W. & Ritchie D. M.  
 
 
Devine par quoi il commence ?
 

Code :
  1. main()
  2. {
  3. printf("prout\n" );
  4. }

 
 
 
ça ma rebute un peu :D

Reply

Marsh Posté le 18-10-2003 à 11:48:42    

vanilla a écrit :


 
plus de 50% du noyau linux est codé en C
 
et ça marche plutot bien  :jap:  
 
 
 
 
Hazar a écrit :
T'as un bouquin : Le Langage C norme ANSI de Kernighan B. W. & Ritchie D. M.  
 
 
Devine par quoi il commence ?
 

Code :
  1. main()
  2. {
  3. printf("prout\n" );
  4. }

 
 
 
ça ma rebute un peu :D


 
le bouquin je t'avoue que je l'ai pas lu ... enfin c'est pas ecrit par n'importe qui, ce sont un peu les parents du C qui ont fait ca ...  :ange:

Reply

Marsh Posté le 18-10-2003 à 11:57:43    

Ouais je sais mais j'ai déjà entendu dire qu'il était plus vraiment à jour, la preuve ici d'ailleurs. C'est un peu dommage qu'il le remmette pas aux normes.

Reply

Marsh Posté le 18-10-2003 à 12:04:58    

vanilla a écrit :

Ouais je sais mais j'ai déjà entendu dire qu'il était plus vraiment à jour, la preuve ici d'ailleurs. C'est un peu dommage qu'il le remmette pas aux normes.


 
pourquoi ne pas remettre le hamlet de shakespeare au gour du jour pendant qu'on y est?  :whistle:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 18-10-2003 à 12:05:58    

vanilla a écrit :


plus de 50% du noyau linux est codé en C
et ça marche plutot bien

C'est un miracle.
J'ai jamais su si ce sont des génies (ils auraient paut-être pas choisi le C dans ce cas là) ou s'ils sont très nombreux.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed