Pourquoi devons-nous utiliser `int main` et non `void main` en C++? [dupliquer]

cette question a déjà une réponse ici:

  • Quel doit être le main() de retour dans le C et le C++? 18 réponses

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

26
demandé sur the Tin Man 2009-01-16 11:35:56

8 réponses

La réponse courte, c'est parce que la norme C++ exige main() retourner int .

comme vous le savez probablement, la valeur de retour de la fonction main() est utilisée par la bibliothèque d'exécution comme code de sortie du processus. Unix et Win32 prennent en charge le concept d'un (petit) entier retourné d'un processus après qu'il a terminé. Retourner une valeur de main() fournit une façon pour le programmeur de spécifier cette valeur.

27
répondu Greg Hewgill 2012-02-24 01:05:25

la plupart des systèmes d'exploitation rapportent à l'utilisateur, ou au processus d'appel, si une application a été réussie ou non. Ceci est particulièrement utile dans le script, où le script peut conditionnellement se connecter (si-alors) sur les résultats d'un programme. Quelque chose du genre:

// pseudo-code
screenscrape  http://mydatasource.com > results.txt
if errorlevel == 0 then
   processfile results.txt
else
   echo Screen Scraping Failed!
end if

ce statut de résultat est fait via la valeur de retour de main.

alors que certains compilateurs permettent de vide main, pour le bien de la cohérence et la simplicité, le La norme ANSI exige un seul prototype de main:

int main(int argc, char *argv[]);

parce que dans 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 de configuration qui appellent main attendent une valeur de retour int, et n'en trouvent pas, le behavior peut être indéfini.

courte réponse:

  • la valeur de retour de main est utile pour l'écriture de scripts.
  • les routines de configuration et de nettoyage qui invoquent main ont besoin d'une interface cohérente à utiliser.
14
répondu abelenky 2012-02-24 01:05:23

principale raison du changement

void main () { }

à

int main () {}

dans les versions ultérieures était à erreur de notification se produit dans le programme au cours de l'exécution de système d'exploitation sur lequel il exécute

return 0;

identifier le programme exécuté avec succès si tout nombre plutôt que 0 retourné qui signifie qu'une erreur s'est produite who's code d'erreur est qui retourné par main. si vous êtes en cours d'exécution sur codeblock IDE voir dans le journal de construction si retour principal 0 Il 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

4
répondu Code Warrior 2015-07-09 12:15:09

De Wikipedia:

la valeur retournée par la fonction principale devient l'état de sortie du processus, bien que la norme C n'attribue de sens spécifique qu'à deux valeurs: EXIT_SUCCESS (traditionnellement zéro) et EXIT_FAILURE . La signification des autres valeurs de retour possibles est définie par la mise en œuvre.

1
répondu BBetances 2018-04-20 11:55:08

comme en C, parce que le processus donnera au système D'exploitation un code de sortie.

vous pouvez 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
répondu Keltia 2009-01-16 08:41:50

parce que int est le returncode qu'un programme peut retourner à L'OS.

Vous pouvez interroger cette valeur pour vérifier si l'opération a été réussie.

cela a été extrêmement utile lors de l'utilisation de scripts en ligne de commande.

0
répondu Toon Krijthe 2009-01-16 08:41:58

Quand nous exécutons notre programme pour vérifier qu'il fonctionne correctement ou non. Donc quand il retourne 0 cela signifie que c'est true & ran avec succès, s'il retourne 1 alors il ne fonctionne pas avec succès & cette valeur int indique au système D'exploitation si le programme a fonctionné avec succès ou non

0
répondu user2786956 2013-09-17 09:49:01

peut-être parce qu'il est logique de sortir proprement avec un code d'état de la méthode main() . En Java, nous devons imiter cela en utilisant System.exit() qui n'est pas si gracieux que ça.

0
répondu Rahul 2018-04-20 11:55:36