différence entre retour 1, retour 0 et retour -1 et sortie?
par exemple, considérons code suivant
int main(int argc,char *argv[])
{
int *p,*q;
p = (int *)malloc(sizeof(int)*10);
q = (int *)malloc(sizeof(int)*10);
if (p == 0)
{
printf("ERROR: Out of memory\n");
return 1;
}
if (q == 0)
{
printf("ERROR: Out of memory\n");
exit(0);
}
return 0;
}
ce n'retour 0,de retour de 1,exit(0) faire dans le programme ci-dessus..
exit(0) sortie total du programme de contrôle et sort de la boucle, mais ce qui se passe en cas de retour 0,retour 1,renvoie -1.
source d'informationauteur LearNer | 2014-03-24
Vous devez vous connecter pour publier un commentaire.
return
demain()
est équivalent àexit
le programme s'arrête immédiatement l'exécution avec statut de sortie défini comme la valeur passée à
return
ouexit
return
dans une fonction interne (pasmain
) prendra fin immédiatement l'exécution de la fonction spécifique de retourner le résultat de la fonction appelante.exit
de n'importe quel code mettre fin à l'exécution du programme immédiatement.statut de 0 signifie que le programme a réussi.
statut différent de 0 signifie que le programme est sorti en raison d'une erreur ou d'anomalie.
Si vous sortez avec un statut différent de 0, vous êtes censé pour imprimer un message d'erreur à
stderr
donc, au lieu d'utiliserprintf
mieux quelque chose commeremarque que (en fonction de l'OS que vous êtes sur) il y a des conventions sur les codes de retour.
Google pour "sortir des codes d'état" ou similaire, et vous trouverez beaucoup d'information sur DONC et d'ailleurs.
Vaut la peine de mentionner que l'OS lui-même peut mettre fin à votre programme de retrait des codes de statut si vous tentez d'effectuer certaines opérations non valides, comme la lecture de la mémoire vous n'avez pas accès.
return n
à partir de votre entrée principale fonction sera de mettre fin à votre processus et le rapport au processus parent (celui qui a exécuté votre processus), le résultat de votre processus. 0 signifie le SUCCÈS. D'autres codes indique généralement un échec et sa signification.return n
demain
est équivalent àexit(n)
.Le valide retourné est le reste de votre programme. C'est le sens est OS dépendante. Sur unix, 0 signifie normale d'expiration et une valeur non nulle indique que si la forme de l'erreur forcé votre programme de résilier le contrat sans l'accomplissement de son but.
Il est rare que votre exemple renvoie 0 (arrêt normal) quand il semble avoir manquer de mémoire.
Comme expliqué icidans le contexte de
main
les deuxreturn
etexit
faire la même choseQ: Pourquoi avons-nous besoin de
return
ouexit
?Un: Pour indiquer l'état de l'exécution.
Dans votre exemple, même si vous n'avez pas avoir de retour ou de sortie des états le code à exécuter correctement (en Supposant que tout le reste est du point de vue syntaxique,etc-allié correcte. Aussi, si (et il doit l'être)
main
retourneint
vous avez besoin quereturn 0
à la fin).Mais, après l'exécution, vous n'avez pas de moyen de savoir si votre code a fonctionné comme prévu.
Vous pouvez utiliser le code de retour du programme (sous *nix environnements , à l'aide de
$?
) qui vous donne le code (tel que défini parexit
oureturn
) . Depuis que vous avez établi ces codes vous-même, vous comprenez à quel point le code atteint avant la résiliation.Vous pouvez écrire
return 123
où123
indique la réussite dans le poste de l'exécution des contrôles.Généralement, dans les *nix environnements
0
est pris comme le succès, et non à zéro des codes comme des échecs.return
en retour de la fonction d'exécution de retour à l'appelant et à l'exit
à partir de la fonction quitte le programme.dans
main
fonctionreturn 0
ouexit(0)
sont les mêmes mais si vous écrivezexit(0)
en fonction différente, alors vous programme la sortie de cette position.retour des valeurs différentes comme
return 1
oureturn -1
signifie que le programme est de retour d'erreur .Quand
exit(0)
est utilisé pour quitter le programme, les destructeurs pour configuré localement des non-objets statiques ne sont pas appelés. Mais les destructeurs sont appelés en cas de retour 0 est utilisé.