Qual è la differenza? Qual è il preferito, o quando dovrei usare ciascuno rispettivamente?EXIT_FAILURE vs exit (1)?
risposta
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
oEXIT_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 .
Inoltre rende la funzione 'exit' nel codice più descrittiva. –
La risposta afferma: "' EXIT_FAILURE' per il caso non di errore. " Vuoi dire: "EXIT_FAILURE" per il caso di errore? " –
@VilhelmGray: Sì. Ben avvistato. –
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.
È una costante in tutti i sistemi operativi * multipli *? – Aerovistae
Vedere http://www.gnu.org/software/libc/manual/html_node/Exit-Status.html –
@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. –
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 macroEXIT_SUCCESS
eEXIT_FAILURE
per il valore di stato convenzionale per il successo e l'errore , rispettivamente. Sono dichiarati nel file stdlib.h.
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.
Domanda molto simile: http://stackoverflow.com/q/8867871/827263 –