Pourquoi devons-nous utiliser int main
et non void main
en C++?
La réponse courte est que la norme C++ requiert que main()
renvoie int
.
Comme vous le savez probablement, la valeur de retour de la fonction main()
est utilisée par la bibliothèque d’exécution en tant que code de sortie du processus. Unix et Win32 supportent tous deux le concept d'un (petit) entier renvoyé par un processus après sa fin. Renvoyer une valeur de main()
fournit au programmeur un moyen de spécifier cette valeur.
La plupart des systèmes d'exploitation signalent à l'utilisateur, ou au processus d'appel, si une application a abouti ou non. Ceci est particulièrement utile dans les scripts, où le script peut conditionnellement créer une branche (si-alors) sur les résultats d'un programme. Quelque chose dans le genre de:
// pseudo-code
screenscrape http://mydatasource.com > results.txt
if errorlevel == 0 then
processfile results.txt
else
echo Screen Scraping Failed!
end if
Cet état de résultat se fait via la valeur de retour de main.
Bien que certains compilateurs autorisent une partition principale vide, pour des raisons de cohérence et de simplicité, la norme ANSI requiert un seul prototype de console principale:
int main(int argc, char *argv[]);
Parce qu'en C, les arguments sont nettoyés par l'appelant, l'auteur de main peut négliger de déclarer ou de traiter les arguments argc & argv. Cependant, si les routines d'installation appelant main attendent une valeur de retour int et n'en trouvent pas, le comportement peut être indéfini.
Réponse courte:
Principale raison du changement
void main () {}
à
int main() { }
dans les versions ultérieures était de notifier une erreur s'est produite dans le programme pendant l'exécution sur le système d'exploitation sur lequel il s'exécute
return 0;
identifie le programme exécuté avec succès si un nombre plutôt que 0 renvoyé signifie qu'une erreur s'est produite qui estcode d'erreurqui est retourné par main . si vous exécutez sur codeblock IDE voir dans le journal de construction si le retour principal 0 est affiché normalement
Process terminated with status 0
sinon, il affiche le code d'état en rouge, ce qui signifie qu'une erreur s'est produite
De Wikipedia:
La valeur renvoyée par la fonction principale devient le statut de sortie du processus, bien que le standard C attribue une signification spécifique à deux valeurs:
EXIT_SUCCESS
(traditionnellement nul) etEXIT_FAILURE
. La signification des autres valeurs de retour possibles est définie par l'implémentation.
Comme en C, car le processus donnera un code de sortie au système d'exploitation.
Vous pouvez soit utiliser
int main (int argc, char ** argv)
{
return (0);
}
ou
int main (int argc, char ** argv)
{
exit (0);
}
C'est au moins dans C89 IIRC.
Parce que int est le code retour, un programme peut retourner au système d'exploitation.
Vous pouvez interroger cette valeur pour vérifier si l'opération a réussi.
C'était extrêmement utile lors de l'utilisation de scripts en ligne de commande.
Peut-être parce qu'il est logique de quitter proprement avec un code d'état de la méthode main()
. En Java, nous devons émuler ceci en utilisant System.exit()
qui n’est pas si gracieux.
Lorsque nous exécutons notre programme pour vérifier qu'il fonctionne correctement ou non. Ainsi, quand il renvoie 0, cela signifie que c'est vrai et qu'il a été exécuté avec succès. S'il renvoie 1, il n'est pas exécuté correctement. Cette valeur int
indique au système d'exploitation si le programme a été exécuté avec succès