web-dev-qa-db-fra.com

Pourquoi avons-nous besoin d'utiliser `int main` et pas` void main` en C++?

Pourquoi devons-nous utiliser int main et non void main en C++?

27
kasperasky

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.

28
Greg Hewgill

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:

  • La valeur de retour de main est utile Pour les scripts.
  • Les routines d'installation et de nettoyage qui invoquent main nécessitent une interface cohérente à utiliser.
15
abelenky

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

5
Code Warrior

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) et EXIT_FAILURE. La signification des autres valeurs de retour possibles est définie par l'implémentation.

1
BBetances

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.

0
Keltia

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.

0
Toon Krijthe

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.

0
Rahul

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

0
user2786956