web-dev-qa-db-fra.com

différence entre retour 1, retour et retour -1 et sortie?

par exemple, considérez le 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;
}

que fait le retour 0, le retour 1, la sortie (0) fait dans le programme ci-dessus .. exit (0) sortira du programme total et le contrôle sortira de la boucle mais ce qui se passera en cas de retour 0, retour 1, retour -1 . 

19
LearNer

return de main() est équivalent à exit

le programme se termine immédiatement avec l'exécution de exit status défini comme valeur transmise à return ou exit

return dans une fonction interne (pas main) mettra immédiatement fin à l'exécution de la fonction spécifique renvoyant le résultat donné à la fonction appelante.

exit de n'importe où sur votre code mettra immédiatement fin à l'exécution du programme.


le statut 0 signifie que le programme a réussi.

statut différent de 0 signifie que le programme a été abandonné pour cause d'erreur ou d'anomalie.

Si vous quittez avec un statut différent de 0, vous êtes censé imprimer un message d'erreur à stderr, donc au lieu d'utiliser printf, utilisez plutôt

if(errorOccurred) {
    fprintf(stderr, "meaningful message here\n");
    return -1;
}

notez que (selon le système d'exploitation sur lequel vous êtes), il existe certaines conventions concernant les codes de retour.

Google pour "codes d'état de sortie" ou similaire et vous trouverez une foule d'informations sur SO et ailleurs.


Il est à noter que le système d'exploitation lui-même peut mettre fin à votre programme avec des codes d'état de sortie spécifiques si vous tentez d'effectuer certaines opérations non valides, telles que la lecture de mémoire, auxquelles vous n'avez pas accès.

23
Paolo

return n de votre fonction d’entrée principale mettra fin à votre processus et transmettra au processus parent (celui qui a exécuté votre processus) le résultat de votre processus. 0 signifie SUCCESS. D'autres codes indiquent généralement un échec et sa signification.

1
giorashc

Pour indiquer le statut d'exécution.

le statut 0 signifie que le programme a réussi.

statut différent de 0 signifie que le programme a été abandonné pour cause d'erreur ou d'anomalie.

retour n; de votre fonction d’entrée principale met fin à votre processus et communique au processus parent (celui qui a exécuté votre processus) le résultat de votre processus. 0 signifie SUCCESS. D'autres codes indiquent généralement un échec et sa signification.

0
Sunil Yadav

Comme expliqué ici , dans le contexte de main, return et exit font la même chose

Q: Pourquoi avons-nous besoin de return ou exit

A: Pour indiquer le statut d'exécution.

Dans votre exemple, même si vous n'aviez pas d'instructions return ou exit, le code fonctionnerait correctement (en supposant que tout le reste soit syntaxiquement correct, etc-ally. De plus, si (et ce devrait être) main renvoie int vous avez besoin de ce return 0 à la fin.

Mais, après exécution, vous ne pouvez pas savoir si votre code a fonctionné comme prévu . Vous pouvez utiliser le code de retour du programme (environnements In * nix, en utilisant $?), qui vous donne le code par exit ou return). Puisque vous définissez vous-même ces codes, vous comprenez à quel point le code est atteint avant de terminer.

Vous pouvez écrire return 123123 indique la réussite des contrôles de post-exécution.

Généralement, dans les environnements * nix, 0 est considéré comme un succès et les codes non nuls, comme des échecs.

0
Suvarna Pattayil

return n de main est équivalent à exit(n).

Le retour valide est le reste de votre programme. Sa signification dépend de l'OS. Sous Unix, 0 signifie une terminaison normale et non-zéro, une telle erreur a obligé votre programme à se terminer sans atteindre son objectif.

Il est inhabituel que votre exemple renvoie 0 (fin normale) lorsqu'il semble manquer de mémoire.

0
Søren Debois