Pourquoi avons-nous besoin d'utiliser `int main` et pas` void main` en C ++? [dupliquer]
-
19-08-2019 - |
Question
Cette question a déjà une réponse ici:
- Que doit renvoyer main () en C et C ++? 17 réponses
Pourquoi devons-nous utiliser int main
et non void main
en C ++?
La solution
La réponse courte est que la norme C ++ requiert que main ()
renvoie int
.
Comme vous le savez probablement, la valeur renvoyée par la fonction main ()
est utilisée par la bibliothèque d'exécution comme 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 ()
offre au programmeur un moyen de spécifier cette valeur.
Autres conseils
La plupart des systèmes d'exploitation signalent à l'utilisateur, ou au processus appelant, si une application a réussi 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 est obtenu via la valeur de retour de main.
Alors que certains compilateurs autorisent la modification de main vide, pour des raisons de cohérence et de simplicité, la norme ANSI exige un seul prototype de main:
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 & amp; argv. Cependant, si les routines d'installation appelant main attendent une valeur de retour int et n'en trouvent pas, le comportement peut ne pas être défini.
Réponse courte:
- La valeur de retour de main est utile pour le script.
- Les routines d'installation et de nettoyage qui font appel à main nécessitent une interface cohérente à utiliser.
Principale raison du changement
void main () {}
à
int main () {}
dans les versions ultérieures, il fallait notifier qu'une erreur se soit produite au cours de l'exécution du programme 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 est renvoyé, ce qui signifie qu'une erreur est survenue. Il s'agit du code d'erreur renvoyé par principal. si vous utilisez IDE codeblock , consultez le journal de construction si le retour principal 0 affiche normalement
Process terminated with status 0
sinon, il affiche le code d'état en rouge, ce qui signifie qu'une erreur s'est produite
Sur 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 abouti.
Cela était extrêmement utile lors de l'utilisation de scripts en ligne de commande.
Lorsque nous exécutons notre programme pour vérifier qu'il fonctionne correctement ou non. Donc, quand il renvoie 0, cela signifie que c'est vrai & amp; a bien été exécuté, s'il renvoie 1, il n'est pas exécuté avec succès & amp; cette valeur int
indique au système d'exploitation si le programme a été exécuté avec succès ou non
Peut-être parce qu'il est judicieux de quitter proprement avec un code d'état de la méthode main ()
. En Java, nous devons émuler ceci en utilisant System.exit ()
, ce qui n'est pas si élégant.