norme : int main() ou int main(void) ?
Le
Nicolas Aunai
bonjour
suite a une petite question en cours ce matin, je me suis demandé si en
C c'était oui ou non valide de mettre int main()
alors je sors ma norme C99, je regarde, paragraphe 5.1.2.2.1 joliment
baptisé Program startup..
bref, je cite :
1 The function called at program startup is named main. The
implementation declares no
prototype for this function. It shall be defined with a return type of
int and with no
parameters:
int main(void) { /* */ }
or with two parameters (referred to here as argc and argv, though any
names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* */ }
or equivalent;9) or in some other implementation-defined manner.
bref, il semble qu'il n'y ai que deux solutions, seulement il n'est pas
marqué que int main() est proscrit
de plus, je vois que paragraphe 6.5.3.4 The sizeof operator :
int main()
{
size_t size;
size = fsize3(10); // fsize3 returns 13
return 0;
}
ou encore dans le 6.7.5.3 Function declarators (including prototypes) :
int main()
{
double b[4][308];
addscalar(4, 2, b, 2.17);
return 0;
}
alors ? que penser de int main() ??
j'ai souvent vu ici des réflexions corrigeant les int main() en int
main(void), que doit-on en penser ? est-ce du pinaillage ? ou de
l'usage de clavier ? est-ce "possible" mais obsolète ? pourquoi ?
depuis quand ?
bref merci de m'éclaircir
--
Nico,
http://astrosurf.com/nicoastro
messenger : nicolas_aunai@hotmail.com
suite a une petite question en cours ce matin, je me suis demandé si en
C c'était oui ou non valide de mettre int main()
alors je sors ma norme C99, je regarde, paragraphe 5.1.2.2.1 joliment
baptisé Program startup..
bref, je cite :
1 The function called at program startup is named main. The
implementation declares no
prototype for this function. It shall be defined with a return type of
int and with no
parameters:
int main(void) { /* */ }
or with two parameters (referred to here as argc and argv, though any
names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* */ }
or equivalent;9) or in some other implementation-defined manner.
bref, il semble qu'il n'y ai que deux solutions, seulement il n'est pas
marqué que int main() est proscrit
de plus, je vois que paragraphe 6.5.3.4 The sizeof operator :
int main()
{
size_t size;
size = fsize3(10); // fsize3 returns 13
return 0;
}
ou encore dans le 6.7.5.3 Function declarators (including prototypes) :
int main()
{
double b[4][308];
addscalar(4, 2, b, 2.17);
return 0;
}
alors ? que penser de int main() ??
j'ai souvent vu ici des réflexions corrigeant les int main() en int
main(void), que doit-on en penser ? est-ce du pinaillage ? ou de
l'usage de clavier ? est-ce "possible" mais obsolète ? pourquoi ?
depuis quand ?
bref merci de m'éclaircir
--
Nico,
http://astrosurf.com/nicoastro
messenger : nicolas_aunai@hotmail.com

Poser une question


9.1 Pour commencer ...
...
int f() /* definition de f() avec declaration sans prototype */
{
return 42;
}
int f(void) /* definition de f() avec declaration avec prototype */
{
return 42;
}
...
int main()
{
}
est donc une déclaration de la fonction main sans prototype, qui est
quelque chose d'autorisé.
"C'est autorisé en C99, mais ca ne le sera bientôt plus."
"Ce qu'il faut faire quand on veut programmer lisiblement, en détectant
les bugs et en gardant du code maintenable et compatible avec le futur :
* utiliser des déclarations et définitions avec prototype."
ben64
<attention, mode opinion personnelle, sans garantie>
Je ne pense pas que int main() soit incorrect en soi, mais ce n'est pas
aussi rigoureux qu'une declaration faisant egalement office de protoype
(tel int main(void) ou int main(int argc, char **argv)), ce qui n'a de
toute facon vraiment d'importance que si tu consideres appeler main
depuis ton propre code. Par exemple (tordu):
#include #include
int main(int argc, char **argv)
{
if (0 != argc)
{
main(argc - 1, argv + 1);
printf("[%d] %sn", argc, *argv);
}
return EXIT_SUCCESS;
}
Maintenant, si tu ecrivais:
#include #include
int main()
{
int pipo = 0;
char *zoupla = "foo";
int bar = pipo == 42;
return main(pipo, zoupla, &bar);
}
ca compile parfaitement, meme avec les warnings et autres strictes
conformances pousses a fond, et pourtant, ca n'a aucun sens.
C'est un peu capillotracte, mais dans l'ensemble, la rigueur n'est pas
un sujet rationel. On n'est pas rigoureux pour des raisons objectives,
mais bien par maniaquerie compulsive (au moins, c'est mon cas...)
</attention, mode opinion personnelle, sans garantie>
--
Bertrand Mollinier Toublet
"Bikes are like ladies, if you don't take care of them all the time,
when you feel like going back to them, it takes a lot of work"
-- Riccardo Turchetto
Je ne suis pas sûr que ce prototype soit un prototype correct de la
fonction main. Ce serait plutôt :
int main(int argc, char * argv[]);
Quelqu'un pourrait confirmer ou infirmer ? Et donner les implications ?
Merci
ben64
--
enlever le news pour me répondre
Les deux sont equivalents.
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Oui.
--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/