OVH Cloud OVH Cloud

Pourquoi "int main" et pas "void main"?

6 réponses
Avatar
Windoz
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Bonjour,

Je me pose une question de logique.
Pourquoi la fonction Main doit renvoyer un int, il serait logique
qu'elle renvoit un void, non?
Je comprends pas.

Merci
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (MingW32)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iQD1AwUBQXPVukaMrumaLs+KAQIoXwb/RMmsm8c9YshUy6vqckF7ZCXfcKccKjj5
ovl/z+MMDau8j+AAqZcq6hvW7syC7p67VhfgNWOqByMvcHRpk8wFuRYj0jylbpXs
p1LWDKVZPCGTvwE9wkHyM1BVkd3LXkFSjmtiOWrjh6nKta35j52wsunhoiHWvNYj
gL0Q/Ozkd536aVoESh3jVpR3W4thHbrwy+oIZLW/clgqvmlezOWe8tha8GRPrkcm
+xhbanHzrzJZzRVmCnbE7JbXOYxQJRcSUvO0PsgYRftkc4ZxJGCEcmTEmy9eXgxX
MlZe+3o8wmk=
=6uuZ
-----END PGP SIGNATURE-----

6 réponses

Avatar
Richard Delorme
Bonjour,

Je me pose une question de logique.
Pourquoi la fonction Main doit renvoyer un int, il serait logique
qu'elle renvoit un void, non?
Je comprends pas.


La valeur retournée par main permet de dire à l'environnement qui a
exécuté le programme la réussite ou un éventuel échec du programme.
C'est particulièrement utile quand on exécute le programme depuis un
shell Unix, qui sait tenir compte de la valeur renvoyée, par exemple :
$ programme1 && programme2
exécute progamme1 et puis programme2 si et seulement si programme1 n'a
pas échoué.

Évidemment, cela n'a pas de sens sur tous les systèmes, mais il existe
un lien historique entre Unix, C et C++, qui fait que c'est un int qui
est renvoyé et que la valeur 0 indique le succès du programme.

--
Richard

Avatar
Jean-Marc Bourguet
Windoz writes:

Bonjour,

Je me pose une question de logique.
Pourquoi la fonction Main doit renvoyer un int, il serait logique
qu'elle renvoit un void, non?
Je comprends pas.


main est appele par du code de la bibliotheque C++ qui fait a peut
pres

initialiser argc et argv
exit(main(argc, argv));

Et la valeur passee a exit peut generalement etre testee (EXITSTATUS
avec COMMAND.COM, $?/$status avec les shells d'origine unix).

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Amerio
La valeur retournée par main permet de dire à l'environnement qui a
exécuté le programme la réussite ou un éventuel échec du programme. C'est
particulièrement utile quand on exécute le programme depuis un shell Unix,
qui sait tenir compte de la valeur renvoyée, par exemple :
$ programme1 && programme2
exécute progamme1 et puis programme2 si et seulement si programme1 n'a pas
échoué.

Évidemment, cela n'a pas de sens sur tous les systèmes, mais il existe un
lien historique entre Unix, C et C++, qui fait que c'est un int qui est
renvoyé et que la valeur 0 indique le succès du programme.


<mode pinaille=on>
si je peux me permettre, ca serait alors plutot
$ prog1 || prog2
pour executer prog 2 ssi prog 1 a échoué
0 indiquant tres souvent un succés, mais pas toujours, "your mileage may
vary" ;-)

Avatar
Amerio
$ programme1 && programme2
exécute progamme1 et puis programme2 si et seulement si programme1 n'a
pas échoué.

Évidemment, cela n'a pas de sens sur tous les systèmes, mais il existe un
lien historique entre Unix, C et C++, qui fait que c'est un int qui est
renvoyé et que la valeur 0 indique le succès du programme.


<mode pinaille=on>
si je peux me permettre, ca serait alors plutot
$ prog1 || prog2
pour executer prog 2 ssi prog 1 a échoué
0 indiquant tres souvent un succés, mais pas toujours, "your mileage may
vary" ;-)


Oops :-( chuis fatigué, vais allé me coucher
J'avais lu t'a phrase sans la négation. Ton commentaire etait donc bon.
J'avais en tete l'eternel
'monprg || exit(-1)' qu'on insere au milieu d'un script pour l'interrompre
des qu'un pb est detecté...


Avatar
Anthony Fleury
Amerio wrote:

$ programme1 && programme2
exécute progamme1 et puis programme2 si et seulement si programme1 n'a
pas échoué.
<mode pinaille=on>

si je peux me permettre, ca serait alors plutot
$ prog1 || prog2
pour executer prog 2 ssi prog 1 a échoué
0 indiquant tres souvent un succés, mais pas toujours, "your mileage may
vary" ;-)


Oui mais là il disait n'a _pas_ échoué, c'est bien donc programme1 &&
programme2 :-)

Anthony
--
Alan Turing thought about criteria to settle the question of whether
machines can think, a question of which we now know that it is about as
relevant as the question of whether submarines can swim.
-- Dijkstra


Avatar
James Kanze
Windoz writes:

|> Je me pose une question de logique.

|> Pourquoi la fonction Main doit renvoyer un int,

Parce que la norme l'exige.

|> il serait logique qu'elle renvoit un void, non?

Il serait plutôt logique qu'elle renvoit un type défini par
l'implémentation. On pourrait bien imaginer un système où le code de
retour serait une chaîne de caractères, par exemple.

En revanche, il faut bien qu'elle renvoit quelque chose, parce qu'il
faut bien pouvoir tester par la suite si le programme à réussi ou non.

--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34