¿Cuál es la diferencia entre salida (0) y salida (1) en C?

96

¿Alguien me puede decir? ¿Cuál es la diferencia entre exit(0)y exit(1)en lenguaje C?

Yu Hao
fuente

Respuestas:

117

¿Cuál es la diferencia entre exit(0)y exit(1)en lenguaje C?

exit(0)indica la terminación exitosa del programa y es completamente portátil, mientras que
exit(1)(generalmente) indica la terminación no exitosa. Sin embargo, su uso no es portátil.

Tenga en cuenta que el estándar C define EXIT_SUCCESSy EXIT_FAILUREdevolver el estado de terminación de un programa C.

0y EXIT_SUCCESSson los valores especificados por el estándar para indicar una terminación exitosa, sin embargo, solo EXIT_FAILUREes el valor estándar para devolver una terminación sin éxito. 1Sin embargo, se usa para lo mismo en muchas implementaciones.


Referencia:

Estándar C99: 7.20.4.3 La exitfunción
Para 5

Finalmente, el control se devuelve al entorno del host. Si el valor del estado es cero o EXIT_SUCCESS, se devuelve una forma definida por la implementación de la terminación exitosa del estado. Si el valor de estado es EXIT_FAILURE, se devuelve una forma definida por la implementación del estado de terminación sin éxito. De lo contrario, el estado devuelto está definido por la implementación.

Alok Save
fuente
1
¿Puede explicar la no portabilidad? En particular, los códigos de salida distintos de cero indican diferentes modos de falla. Es común que una aplicación utilice esto para proporcionar más información. Por tanto, una sola constante ( EXIT_FAILURE) es insuficiente.
Konrad Rudolph
@KonradRudolph: Agregué la cita relevante. Espero que ayude.
Alok Save
1
@Als: POSIX es un estándar. C estándar podría decir "definido por la implementación" pero eso no es lo mismo que decir "no portátil", cuando las implementaciones de hecho lo hacen ponerse de acuerdo sobre la convención.
Cat Plus Plus
1
@PeterM: Búscame una plataforma que no use esta convención. Es probable que sea un entorno especializado / incrustado / independiente / de cualquier tipo, donde la portabilidad exites la menor de tus preocupaciones (diablos, puede que ni siquiera haya una biblioteca C disponible allí. ¡¡¡NADA ES PORTÁTIL !!! 111).
Cat Plus Plus
3
@CatPlusPlus: en OpenVMS, llamar exitcon cualquier valor impar denota éxito. exit(0)se trata como un caso especial en aras de la conformidad con C. Sí, POSIX es un estándar, pero no todos los sistemas lo cumplen. Si desea escribir código que asume POSIX, puede hacerlo, pero limita la portabilidad de su código.
Keith Thompson
12

exit en el lenguaje C toma un número entero que representa un estado de salida.

Salir exitoso

Por lo general, un estado de salida de 0 se considera un éxito o una salida intencional causada por la ejecución exitosa del programa.

Falla de salida

Un estado de salida de 1 se considera un error y, por lo general, significa que el programa tuvo que salir por alguna razón y no pudo completar con éxito todo en el flujo normal del programa.

Aquí hay un recurso GNU que habla sobre el estado de salida.


Como ha indicado @Als, se deben usar dos constantes en lugar de 0 y 1.

EXIT_SUCCESS está definido por el estándar como cero.

EXIT_FAILURE no está restringido por el estándar a ser uno, pero muchos sistemas lo implementan como uno.

Sam DeHaan
fuente
9

exit(0)indica que el programa terminó sin errores. exit(1)indica que hubo un error.

Puede utilizar valores distintos 1para diferenciar entre diferentes tipos de errores.

sch
fuente
3

La diferencia es que el valor devuelto al entorno es 0en el primer caso y 1en el último caso:

$ ./prog_with_exit_0
$ echo $?
0
$

y

$ ./prog_with_exit_1
$ echo $?
1
$

También tenga en cuenta que el valor de las macros EXIT_SUCCESSy el EXIT_FAILUREuso como argumento para la exitfunción están definidos por la implementación, pero generalmente se establecen en respectivamente 0y en un número distinto de cero. (POSIX requiere EXIT_SUCCESSser 0). Por lo que generalmente exit(0)significa un éxito y exit(1)un fracaso.

Una exitllamada a función con un argumento en mainfunción es equivalente a la declaración returncon el mismo argumento.

ouah
fuente
2

exit es una llamada al sistema que se utiliza para finalizar un proceso en ejecución desde el que se llama. El parámetro para salir se utiliza para informar al proceso padre sobre el estado del proceso hijo. Por lo tanto, exit (0) se puede usar (y se usa a menudo) para indicar la ejecución exitosa de un proceso y exit (1) para marcar un error. Link de referencia

Mahtab
fuente
1

exit(0)comportarse como return 0en main()función, exit(1)comportarse como return 1. El estándar es, esa mainfunción return 0, si el programa terminó con éxito mientras que un valor distinto de cero significa que el programa se terminó con algún tipo de error.

Tomáš Šíma
fuente
1

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

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

En caso de falla, normalmente se devuelve cualquier valor positivo para salir del proceso, que puede encontrar en el shell usando $ ?.

Valor superior a 128 que se origina en la terminación por señal. Entonces, si cualquier comando de shell termina con una señal, el estado de retorno debe ser (128 + número de señal).

Por ejemplo:

Si SIGINT termina algún comando de shell, entonces $? dará 130 (128 + 2) (Aquí 2 es el número de señal para SIGINT, verifique usando kill -l)

Sandeep_black
fuente
0

Cuando el ejecutable termina (sale), devuelve un valor al shell que lo ejecutó. exit(0)normalmente indica que todo está bien, mientras exit(1)que indica que algo ha ido mal.

Ed Heal
fuente
0

exit () siempre debe llamarse con un valor entero y los valores distintos de cero se utilizan como códigos de error.

Ver también: Uso de la función exit ()

Squig
fuente
0

exit(0) significa que el programa (proceso) termina normalmente con éxito.

exit(1) significa que el programa (proceso) termina normalmente sin éxito ..

Si quieres observar esto debes saber el manejo de señales y la gestión de procesos en Unix ...

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

Nikunj Patel
fuente
0

exit function. En el lenguaje de programación C, la función de salida llama a todas las funciones registradas con al salir y finaliza el programa.

exit(1)significa que el programa (proceso) finaliza sin éxito. Los búferes de archivos se vacían, las secuencias se cierran y los archivos temporales se eliminan

exit(0) significa que el programa (proceso) finaliza correctamente.

Rashid Thattayil
fuente