99 votes

différence entre sortie et retour

Quelle est la différence entre les instructions return et exit en programmation C

157voto

kriss Points 10450
  • le retour est un enseignement de la langue qui renvoie à partir d'un appel de fonction.
  • la sortie est un appel système (pas un énoncé en langage) qui met fin au processus en cours.

Le seul cas où les deux font la même chose est dans l' main() de la fonction, comme un retour de principal effectue une exit().

Exemple avec return:

#include <stdio.h>

void f(){
    printf("Executing f\n");
    return;
}

int main(){
    f();
    printf("Back from f\n");
}

Si vous exécutez ce programme, il imprime:

Executing f
Back from f

Un autre exemple d' exit():

#include <stdio.h>
#include <stdlib.h>

void f(){
    printf("Executing f\n");
    exit(0);
}

int main(){
    f();
    printf("Back from f\n");
}

Si vous exécutez ce programme, il imprime:

Executing f

Vous ne recevez jamais de "Retour de f". Notez également l' #include <stdlib.h> nécessaire pour appeler une fonction de la bibliothèque exit().

Notez également que le paramètre de la exit() est un entier (c'est le retour d'état de la procédure que le lanceur de processus peut obtenir; l'usage conventionnel est 0 en cas de réussite ou de toute autre valeur pour une erreur).

Le paramètre de l'instruction return est quel que soit le type de retour de la fonction. Si la fonction de type void, vous pouvez omettre le retour à la fin de la fonction.

Dernier point, exit() sont disponibles en deux saveurs _exit() et exit(). La différence entre les formes est qu' exit() des appels de fonctions enregistrés à l'aide d' atexit() ou on_exit() avant de terminer le processus tout en _exit() (à partir de #include <unistd.h>, ou son synonyme _Exit de #include <stdlib.h>) termine le processus immédiatement.

19voto

hurufu Points 31

J'ai écrit deux programmes:

int main(){return 0;}

et

#include <stdlib.h>
int main(){exit(0)}

Après l'exécution d' gcc -S -O1. Voici ce que j'ai trouvé en regardant à l'assemblée (seulement important de pièces):

main:
    movl    $0, %eax    /* setting return value */
    ret                 /* return from main */

et

main:
    subq    $8, %rsp    /* reserving some space */
    movl    $0, %edi    /* setting return value */
    call    exit        /* calling exit function */
                        /* magic and machine specific wizardry after this call */

Donc, ma conclusion est la suivante: utiliser return quand vous le pouvez, et exit() quand vous en avez besoin.

10voto

Dumb Guy Points 1651

En C, il n'y a pas beaucoup de différence quand utilisé dans la fonction de démarrage du programme (qui peuvent être main(), wmain(), _tmain() ou le nom par défaut utilisé par le compilateur).

Si vous return en main(), le contrôle revient à l' _start() de la fonction de la bibliothèque C qui, à l'origine du démarrage de votre programme, puis appelle exit() , de toute façon. Donc, il n'a vraiment pas d'importance que celle que vous utilisez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X