EXIT_FAILURE frente a salida (1)?

3 minutos de lectura

¿Cual es la diferencia? ¿Cuál es el preferido, o cuándo debo usar cada uno respectivamente?

  • Pregunta muy similar: stackoverflow.com/q/8867871/827263

    –Keith Thompson

    18/11/2014 a las 19:05

avatar de usuario
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 es EXIT_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, 0y 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ípicamente 1pero 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

avatar de usuario
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 portabilitypuedes usar las macros EXIT_SUCCESS
y EXIT_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.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad