Qual é a diferença entre exit (0) e exit (1) em C?

96

Alguém pode me dizer? Qual é a diferença entre exit(0)e exit(1)na linguagem C?

Yu Hao
fonte

Respostas:

117

Qual é a diferença entre exit(0)e exit(1)na linguagem C?

exit(0)indica o término do programa com sucesso e é totalmente portátil, Enquanto
exit(1)(geralmente) indica o término sem êxito. No entanto, seu uso não é portátil.

Observe que o padrão C define EXIT_SUCCESSe EXIT_FAILUREretorna o status de término de um programa C.

0e EXIT_SUCCESSsão os valores especificados pelo padrão para indicar uma finalização bem-sucedida; no entanto, EXIT_FAILUREé apenas o valor padrão para retornar uma finalização malsucedida. 1é usado para o mesmo em muitas implementações.


Referência:

Padrão C99: 7.20.4.3 A exitfunção
Para 5

Finalmente, o controle é devolvido ao ambiente do host. Se o valor do status for zero ou EXIT_SUCCESS, uma forma definida pela implementação do encerramento do status com êxito é retornada. Se o valor de status for EXIT_FAILURE, uma forma definida pela implementação da terminação malsucedida do status é retornada. Caso contrário, o status retornado é definido pela implementação.

Alok Save
fonte
1
Você pode explicar a não portabilidade? Em particular, os códigos de saída diferentes de zero indicam diferentes modos de falha. É comum um aplicativo usar isso para fornecer mais informações. Uma única constante ( EXIT_FAILURE) é, portanto, insuficiente.
Konrad Rudolph
@KonradRudolph: Eu adicionei a citação relevante. Espero que ajude.
Alok Save
1
@Als: POSIX é um padrão. Padrão C pode dizer "implementação-definido", mas isso não é equivalente a dizer "não portátil", quando implementações de fato fazer chegar a acordo sobre a convenção.
Cat Plus Plus
1
@PeterM: Encontre uma plataforma que não use essa convenção. É provável que seja algum ambiente especializado / incorporado / independente / qualquer que seja, onde a portabilidade exité a menor de suas preocupações (inferno, pode nem haver uma biblioteca C disponível lá. NADA É PORTÁTIL !!! 111).
Cat Plus Plus
3
@CatPlusPlus: No OpenVMS, chamar exitcom qualquer valor ímpar indica sucesso. exit(0)é tratado como um caso especial por causa da conformidade do C. Sim, POSIX é um padrão, mas nem todos os sistemas estão em conformidade com ele. Se você deseja escrever código que assume POSIX, você está livre para fazê-lo, mas isso limita a portabilidade do seu código.
Keith Thompson de
12

exit na linguagem C leva um número inteiro que representa um status de saída.

Sucesso na saída

Normalmente, um status de saída 0 é considerado um sucesso ou uma saída intencional causada pela execução bem-sucedida do programa.

Falha de saída

Um status de saída 1 é considerado uma falha e, mais comumente, significa que o programa teve que ser encerrado por algum motivo e não foi capaz de concluir tudo com êxito no fluxo normal do programa.

Aqui está um Recurso GNU falando sobre o Status de Saída.


Como @Als afirmou, duas constantes devem ser usadas no lugar de 0 e 1.

EXIT_SUCCESS é definido pelo padrão como zero.

EXIT_FAILURE não é restrito pelo padrão a ser um, mas muitos sistemas o implementam como um.

Sam DeHaan
fonte
9

exit(0)indica que o programa foi encerrado sem erros. exit(1)indica que houve um erro.

Você pode usar valores diferentes, exceto 1para diferenciar entre os diferentes tipos de erros.

sch
fonte
3

A diferença é que o valor devolvido ao ambiente está 0no primeiro caso e 1no último caso:

$ ./prog_with_exit_0
$ echo $?
0
$

e

$ ./prog_with_exit_1
$ echo $?
1
$

Observe também que o valor da macro EXIT_SUCCESSe EXIT_FAILUREusado como um argumento para a exitfunção são definidos pela implementação, mas geralmente são configurados como respectivamente 0e um número diferente de zero. (POSIX EXIT_SUCCESSdeve ser 0). Então, geralmente exit(0)significa um sucesso e exit(1)um fracasso.

Uma exitchamada de função com um argumento em mainfunção é equivalente à instrução returncom o mesmo argumento.

ouah
fonte
2

exit é uma chamada de sistema usada para terminar um processo em execução a partir do qual é chamada. O parâmetro para sair é usado para informar o processo pai sobre o status do processo filho. Portanto, exit (0) pode ser usado (e frequentemente usado) para indicar a execução bem-sucedida de um processo e exit (1) para sinalizar um erro. link de referência

mahtab
fonte
1

exit(0)se comporte como return 0em main()função, exit(1)se comporte como return 1. O padrão é, essa mainfunção return 0, se o programa terminou com sucesso enquanto um valor diferente de zero significa que o programa foi finalizado com algum tipo de erro.

Tomáš Šíma
fonte
1

exit (0) é equivalente a exit (EXIT_SUCCESS).

exit (1) é equivalente a exit (EXIT_FAILURE).

Em caso de falha, normalmente qualquer valor positivo é retornado para sair do processo, que você pode encontrar no shell usando $ ?.

Valor maior que 128 que é causado a terminação por sinal. Portanto, se algum comando shell terminar por sinal, o status de retorno deve ser (128 + número do sinal).

Por exemplo:

Se algum comando shell for encerrado por SIGINT, então $? dará 130 (128 + 2) (aqui 2 é o número do sinal para SIGINT, verifique usando kill -l)

Sandeep_black
fonte
0

Quando o executável termina (sai), ele retorna um valor para o shell que o executou. exit(0)geralmente indica que está tudo bem, enquanto exit(1)indica que algo deu errado.

Ed Heal
fonte
0

exit () deve sempre ser chamado com um valor inteiro e valores diferentes de zero são usados ​​como códigos de erro.

Veja também: Uso da função exit ()

Squig
fonte
0

exit(0) significa que o Programa (Processo) termina normalmente com sucesso.

exit(1) significa que o programa (processo) termina normalmente sem sucesso ..

Se você quiser observar isso, você deve saber como lidar com sinais e gerenciamento de processos no Unix ...

saber sobre sigaction, watipid()..for () ... tal .... API ...........

Nikunj Patel
fonte
0

exit function. Na linguagem de programação C, a função de saída chama todas as funções registradas com na saída e termina o programa.

exit(1)significa que o programa (processo) foi encerrado sem sucesso. Os buffers de arquivo são liberados, os fluxos são fechados e os arquivos temporários são excluídos

exit(0) significa que o Programa (Processo) foi encerrado com sucesso.

Rashid Thattayil
fonte