Qual è la differenza tra exit (0) ed exit (1) in C?


96

Qualcuno può dirmelo? Qual è la differenza tra exit(0)e exit(1)nel linguaggio C?

Risposte:


117

Qual è la differenza tra exit(0)e exit(1)nel linguaggio C?

exit(0)indica la conclusione del programma con successo ed è completamente portabile, mentre
exit(1)(di solito) indica una terminazione non riuscita. Tuttavia, il suo utilizzo non è portatile.

Si noti che lo standard C definisce EXIT_SUCCESSeEXIT_FAILURE restituisce lo stato di terminazione da un programma C.

0e EXIT_SUCCESSsono i valori specificati dallo standard per indicare la terminazione riuscita, tuttavia, solo EXIT_FAILUREil valore standard per la restituzione della terminazione non riuscita. 1è usato per lo stesso in molte implementazioni però.


Riferimento:

C99 Standard: 7.20.4.3 La exitfunzione
Para 5

Infine, il controllo viene restituito all'ambiente host. Se il valore di status è zero o EXIT_SUCCESS, viene restituita una forma de fi nita dall'implementazione della terminazione con esito positivo dello stato. Se il valore di status è EXIT_FAILURE, viene restituita una forma definita dall'implementazione della terminazione non riuscita dello stato. Altrimenti lo stato restituito è definito dall'implementazione.


1
Puoi spiegare la non portabilità? In particolare, i codici di uscita diversi da zero indicano diverse modalità di errore. È normale che un'applicazione lo utilizzi per fornire ulteriori informazioni. Una singola costante ( EXIT_FAILURE) è quindi insufficiente.
Konrad Rudolph

@KonradRudolph: ho aggiunto la citazione pertinente. Spero che aiuti.
Alok Save

1
@Als: POSIX è uno standard. C standard potrebbe dire "implementazione definita", ma che non è equivalente a dire "Non portatile", quando le implementazioni di fatto fanno approvano la convenzione.
Cat Plus Plus

1
@ PeterM: Trovami una piattaforma che non utilizzi questa convenzione. È probabile che si tratti di un ambiente specializzato / incorporato / indipendente / di qualsiasi tipo, in cui la portabilità exitè l'ultima delle tue preoccupazioni (diavolo, potrebbe non esserci nemmeno una libreria C disponibile. NIENTE È PORTATILE !!! 111).
Cat Plus Plus

3
@ CatPlusPlus: su OpenVMS, la chiamata exitcon qualsiasi valore dispari denota successo. exit(0)è considerato un caso speciale per motivi di conformità C. Sì, POSIX è uno standard, ma non tutti i sistemi sono conformi ad esso. Se vuoi scrivere codice che presuppone POSIX, sei libero di farlo, ma limita la portabilità del tuo codice.
Keith Thompson

12

exit nel linguaggio C prende un numero intero che rappresenta uno stato di uscita.

Esci da successo

In genere, uno stato di uscita pari a 0 è considerato un successo o un'uscita intenzionale causata dalla corretta esecuzione del programma.

Errore di uscita

Uno stato di uscita di 1 è considerato un errore e più comunemente significa che il programma ha dovuto uscire per qualche motivo e non è stato in grado di completare con successo tutto nel normale flusso del programma.

Ecco una risorsa GNU che parla dello stato di uscita.


Come ha affermato @Als, è necessario utilizzare due costanti al posto di 0 e 1.

EXIT_SUCCESS è definito dallo standard come zero.

EXIT_FAILURE non è limitato dallo standard ad essere uno, ma molti sistemi lo implementano come uno.


9

exit(0)indica che il programma è terminato senza errori. exit(1)indica che si è verificato un errore.

È possibile utilizzare valori diversi oltre 1a distinguere tra diversi tipi di errori.


3

La differenza è che il valore restituito all'ambiente è 0nel primo caso e 1nel secondo caso:

$ ./prog_with_exit_0
$ echo $?
0
$

e

$ ./prog_with_exit_1
$ echo $?
1
$

Si noti inoltre che il valore delle macro EXIT_SUCCESSe EXIT_FAILUREutilizzato come argomento per la exitfunzione sono definiti dall'implementazione ma di solito sono impostati rispettivamente su 0un numero diverso da zero. (POSIX richiede EXIT_SUCCESSdi essere 0). Quindi di solito exit(0)significa un successo e exit(1)un fallimento.

Una exitchiamata di funzione con un argomento in mainfunction è equivalente all'istruzione returncon lo stesso argomento.


2

exit è una chiamata di sistema utilizzata per terminare un processo in esecuzione da cui viene chiamata. Il parametro per uscire viene utilizzato per informare il processo genitore sullo stato del processo figlio. Quindi, exit (0) può essere usata (e spesso usata) per indicare l'esecuzione riuscita di un processo e exit (1) per segnalare un errore. link di riferimento


1

exit(0)comportarsi come return 0in main()funzione, exit(1)comportarsi come return 1. Lo standard è, quella mainfunzione return 0, se il programma è terminato con successo mentre un valore diverso da zero significa che il programma è stato terminato con qualche tipo di errore.


1

exit (0) equivale a exit (EXIT_SUCCESS).

exit (1) equivale a exit (EXIT_FAILURE).

In caso di fallimento normalmente viene restituito qualsiasi valore positivo per uscire dal processo, che puoi trovare sulla shell usando $ ?.

Valore più di 128 che è causato dalla terminazione per segnale. Quindi, se un comando di shell termina con un segnale, lo stato di ritorno deve essere (128 + numero di segnale).

Per esempio:

Se un comando di shell viene terminato da SIGINT, $? darà 130 (128 + 2) (Qui 2 è il numero di segnale per SIGINT, controlla usando kill -l)


0

Quando l'eseguibile termina (esce) restituisce un valore alla shell che lo ha eseguito. exit(0)di solito indica che tutto va bene, mentre exit(1)indica che qualcosa è andato storto.



0

exit(0) significa che il programma (processo) termina normalmente con successo.

exit(1) significa che il programma (processo) termina normalmente senza successo.

Se vuoi osservare questa cosa devi conoscere la gestione dei segnali e la gestione dei processi in Unix ...

sapere sigaction, watipid()..per () ... tale .... API ...........


0

exit function. Nel linguaggio di programmazione C, la funzione exit richiama tutte le funzioni registrate con in exit e termina il programma.

exit(1)significa che il programma (processo) termina senza successo. I buffer dei file vengono svuotati, i flussi vengono chiusi e i file temporanei vengono eliminati

exit(0) significa che il programma (processo) è terminato con successo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.