2012-12-02 17 views
36

Qual è la differenza? Qual è il preferito, o quando dovrei usare ciascuno rispettivamente?EXIT_FAILURE vs exit (1)?

+0

Domanda molto simile: http://stackoverflow.com/q/8867871/827263 –

risposta

41

exit(1) (in genere) indica interruzione non riuscita. Tuttavia, il suo utilizzo è non portatile. Ad esempio, su OpenVMS, exit(1) indica effettivamente il successo.

Solo EXIT_FAILURE è il valore standard per la restituzione della terminazione non riuscita, ma 1 viene utilizzato per lo stesso in molte implementazioni.


Quindi, per riassumere:
Se si vuole scrivere il codice uso perfettamente portatile,

EXIT_FAILURE per caso il fallimento. Mentre,
È possibile utilizzare sia exit(0) o EXIT_SUCCESS per il caso di successo.

Si noti che, EXIT_SUCCESS o 0 sono entrambi uguali.


Riferimento:

C99 standard: 7.20.4.3 La funzione di exit
Para 5

Infine, il controllo viene restituito all'ambiente host. Se il valore di stato è zero o EXIT_SUCCESS, un modulo definito dall'implementazione della terminazione con esito positivo è restituito. Se il valore di stato è EXIT_FAILURE, viene restituito un modulo definito dall'implementazione della terminazione non riuscita dello stato. In caso contrario, lo stato restituito è definito dall'implementazione .

+3

Inoltre rende la funzione 'exit' nel codice più descrittiva. –

+3

La risposta afferma: "' EXIT_FAILURE' per il caso non di errore. " Vuoi dire: "EXIT_FAILURE" per il caso di errore? " –

+0

@VilhelmGray: Sì. Ben avvistato. –

4

Utilizzare EXIT_FAILURE. È una costante utilizzata in tutto il sistema operativo. Il suo valore potrebbe essere diverso da 1 ed è anche più descrittivo nel codice.

+0

È una costante in tutti i sistemi operativi * multipli *? – Aerovistae

+1

Vedere http://www.gnu.org/software/libc/manual/html_node/Exit-Status.html –

+4

@Aerovistae: 'EXIT_FAILURE' è specificato dallo standard C, ed è stato dal 1989. Sarà disponibile su qualsiasi compilatore C ragionevolmente moderno. Il suo valore è in genere '1', ma sarà sempre il valore corretto che denota l'esecuzione fallita del programma nel sistema operativo corrente. –

1

Esistono convenzioni per quali tipi di valori di stato devono essere restituiti determinati programmi. La convenzione più comune è semplicemente 0 per il successo e 1 per il fallimento. I programmi che eseguono il confronto utilizzano una convenzione diversa: utilizzano lo stato 1 per indicare una mancata corrispondenza e lo stato 2 indica un'impossibilità di comparazione. Il tuo programma dovrebbe seguire una convenzione esistente se una convenzione esistente ha senso per questo.

Alcuni sistemi non POSIX utilizzano diverse convenzioni per i valori di uscita . For greater portability, è possibile utilizzare i macro EXIT_SUCCESS e EXIT_FAILURE per il valore di stato convenzionale per il successo e l'errore , rispettivamente. Sono dichiarati nel file stdlib.h.

8

Per codice veramente portatile, è preferibile EXIT_FAILURE.Lo standard C definisce solo il significato per tre valori: EXIT_FAILURE, 0 e EXIT_SUCCESS (con 0 e EXIT_SUCCESS in sostanza).

Dal punto di vista pratico, la maggior parte dei sistemi accetta anche altri valori. Se la memoria funziona, Linux ti consente di restituire qualsiasi valore a 8 bit e valori di Windows a 16 bit. A meno che tu non sia sinceramente interessato al porting su mainframe, VMS, ecc. IBM, è probabile che non ti interessi la maggior parte dei sistemi che non supporteranno valori di ritorno di almeno 8 bit.