Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1127 connectés 

  FORUM HardWare.fr
  Programmation
  C

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

 



 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

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

n°542578
vanilla
datoune's revival
Posté le 17-10-2003 à 19:56:44  profilanswer
 

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
mood
Publicité
Posté le 17-10-2003 à 19:56:44  profilanswer
 

n°542580
nraynaud
lol
Posté le 17-10-2003 à 19:59:42  profilanswer
 

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

n°542585
drasche
Posté le 17-10-2003 à 20:13:22  profilanswer
 

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)
n°542588
Taz
bisounours-codeur
Posté le 17-10-2003 à 20:23:02  profilanswer
 

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

n°542590
skeye
Posté le 17-10-2003 à 20:23:54  profilanswer
 

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

n°542593
drasche
Posté le 17-10-2003 à 20:27:51  profilanswer
 

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)
n°542594
MagicBuzz
Posté le 17-10-2003 à 20:28:08  profilanswer
 

c pas :
 

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


 
en C :??:

n°542595
Taz
bisounours-codeur
Posté le 17-10-2003 à 20:29:11  profilanswer
 

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

n°542597
matthias
Posté le 17-10-2003 à 20:29:58  profilanswer
 

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

n°542599
MagicBuzz
Posté le 17-10-2003 à 20:31:29  profilanswer
 

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...

mood
Publicité
Posté le 17-10-2003 à 20:31:29  profilanswer
 

n°542600
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-10-2003 à 20:32:55  profilanswer
 

[: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
n°542601
skeye
Posté le 17-10-2003 à 20:33:50  profilanswer
 

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?

n°542602
drasche
Posté le 17-10-2003 à 20:34:09  profilanswer
 

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)
n°542603
Taz
bisounours-codeur
Posté le 17-10-2003 à 20:35:32  profilanswer
 

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

n°542605
Taz
bisounours-codeur
Posté le 17-10-2003 à 20:38:24  profilanswer
 

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

n°542612
MagicBuzz
Posté le 17-10-2003 à 20:51:25  profilanswer
 

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
n°542614
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-10-2003 à 20:53:38  profilanswer
 

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
n°542619
MagicBuzz
Posté le 17-10-2003 à 20:56:17  profilanswer
 

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.

n°542620
Taz
bisounours-codeur
Posté le 17-10-2003 à 20:56:31  profilanswer
 

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

n°542621
MagicBuzz
Posté le 17-10-2003 à 20:57:00  profilanswer
 

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é.

n°542622
Taz
bisounours-codeur
Posté le 17-10-2003 à 20:57:13  profilanswer
 

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 ...

n°542624
MagicBuzz
Posté le 17-10-2003 à 20:59:19  profilanswer
 

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
n°542633
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-10-2003 à 21:07:56  profilanswer
 

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
n°542636
Taz
bisounours-codeur
Posté le 17-10-2003 à 21:12:24  profilanswer
 

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 ...

n°542641
vanilla
datoune's revival
Posté le 17-10-2003 à 21:21:51  profilanswer
 

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 ?

n°542643
nraynaud
lol
Posté le 17-10-2003 à 21:24:38  profilanswer
 

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 !

n°542708
SquiZZ
Posté le 17-10-2003 à 23:34:50  profilanswer
 

manque pas un  

Code :
  1. #include <stdio.h>


 
au fait ?

n°542745
vanilla
datoune's revival
Posté le 18-10-2003 à 00:20:19  profilanswer
 

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.

n°542757
hazar
J'passais dans le coin...
Posté le 18-10-2003 à 01:03:26  profilanswer
 

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
n°542765
sanctuaire
Droit dans les yeux...
Posté le 18-10-2003 à 03:23:38  profilanswer
 

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 :) )

n°542766
bjone
Insert booze to continue
Posté le 18-10-2003 à 03:53:59  profilanswer
 

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

n°542767
matafan
Posté le 18-10-2003 à 03:54:02  profilanswer
 

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
n°542769
nraynaud
lol
Posté le 18-10-2003 à 04:43:37  profilanswer
 

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.

n°542771
matafan
Posté le 18-10-2003 à 05:05:16  profilanswer
 

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...

n°542772
nraynaud
lol
Posté le 18-10-2003 à 06:44:35  profilanswer
 

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.

n°542796
vanilla
datoune's revival
Posté le 18-10-2003 à 11:09:36  profilanswer
 

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

n°542804
hazar
J'passais dans le coin...
Posté le 18-10-2003 à 11:48:42  profilanswer
 

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:

n°542807
vanilla
datoune's revival
Posté le 18-10-2003 à 11:57:43  profilanswer
 

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.

n°542810
schnapsman​n
Zaford Beeblefect
Posté le 18-10-2003 à 12:04:58  profilanswer
 

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!"
n°542811
nraynaud
lol
Posté le 18-10-2003 à 12:05:58  profilanswer
 

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.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

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

 

Sujets relatifs
[PHP] Changer couleur écriture /ligne && Mise à jour date (p.2)Impossible de compiler un "Hello World" sans mes verres progressifs
conflit d'ecriture Access??Ecriture d'un composant BD
Ecriture zone mémoire dans un fichier donne n'importe quoi (resolu)Ecriture alignée à la vertical en HTML
[Perl] lecture/écriture d'un fichierLecture / Ecriture fichier texte
Ecriture d'un nombre selon un format précis 
Plus de sujets relatifs à : [C] La bonne écriture d'un hello world ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR