¿Cual es la diferencia? ¿Cuál es el preferido, o cuándo debo usar cada uno respectivamente?
EXIT_FAILURE frente a salida (1)?
Guardar
exit(1)
(generalmente) indica una terminación fallida. Sin embargo, su uso no es portátil. por ejemplo, en OpenVMS, exit(1)
en realidad indica éxito.
Solamente EXIT_FAILURE
es el valor estándar para devolver una terminación fallida, pero 1
se utiliza para lo mismo en muchas implementaciones.
Así que para resumir:
Si desea escribir un uso de código perfectamente portátil,
EXIT_FAILURE
para caso de falla. Tiempo,
Puedes usar cualquiera exit(0)
o EXIT_SUCCESS
para caso de éxito.
Tenga en cuenta que, EXIT_SUCCESS
o 0
ambos son iguales.
Referencia:
Estándar C99: 7.20.4.3 El exit
función
Párrafo 5
Finalmente, el control se devuelve al entorno del host. Si el valor del estado es
zero
o
EXIT_SUCCESS
, se devuelve una forma definida por la implementación del estado terminación exitosa. Si el valor del estado esEXIT_FAILURE
, se devuelve una forma definida por la implementación del estado terminación sin éxito. De lo contrario, el estado devuelto está definido por la implementación.
-
La respuesta dice: “
EXIT_FAILURE
para el caso de no falla.” ¿Quiere decir: “EXIT_FAILURE
para el caso de falla?”– Vilhelm Grey
18/11/2014 a las 18:35
-
@VilhelmGray: Sí. Bien visto.
– Alok Guardar
18 de noviembre de 2014 a las 18:54
Para un código verdaderamente portátil, EXIT_FAILURE
se prefiere. El estándar C solo define el significado de tres valores: EXIT_FAILURE
, 0
y EXIT_SUCCESS
(con 0
y EXIT_SUCCESS
esencialmente sinónimo).
Desde un punto de vista práctico, la mayoría los sistemas típicos también aceptan otros valores. Si la memoria sirve, Linux le permitirá devolver cualquier valor de 8 bits y valores de Windows de 16 bits. A menos que le interese honestamente migrar a un mainframe de IBM, VMS, etc., lo más probable es que no le interese la mayoría de los sistemas que no admitirán valores de retorno de al menos 8 bits.
Usar EXIT_FAILURE
. Es una constante que se utiliza en todo el sistema operativo. Su valor puede ser diferente a 1 y además es más descriptivo en el código.
-
¿Es una constante a lo largo múltiple SO?
– nombre_de_usuario_temporal
2 de diciembre de 2012 a las 7:42
-
@Aerovistae:
EXIT_FAILURE
está especificado por el estándar C, y lo ha sido desde 1989. Estará disponible en cualquier compilador C razonablemente moderno. Su valor es típicamente1
pero siempre será el valor correcto el que denota la ejecución fallida del programa en el sistema operativo actual.–Keith Thompson
18/11/2014 a las 19:05
Ravindra Bagale
Existen convenciones sobre qué tipo de valores de estado deben devolver ciertos programas. La convención más común es simplemente 0 para éxito y 1 para fracaso. Los programas que realizan comparaciones usan una convención diferente: usan el estado 1 para indicar una discrepancia y el estado 2 para indicar la incapacidad de comparar. Su programa debe seguir una convención existente si una convención existente tiene sentido para él.
Algunos sistemas que no son POSIX usan diferentes convenciones para los valores de estado de salida.
For greater portability
puedes usar las macrosEXIT_SUCCESS
yEXIT_FAILURE
para el valor de estado convencional para el éxito y el fracaso, respectivamente. Se declaran en el archivo stdlib.h.
No solo VMS tiene sus propias reglas, también AmigaDOS define un código de retorno por debajo de 5 como correcto.
Pregunta muy similar: stackoverflow.com/q/8867871/827263
–Keith Thompson
18/11/2014 a las 19:05