Solución:
EXIT_FAILURE
, ya sea en una declaración de devolución en main
o como argumento para exit()
, es la única forma portátil de indicar fallas en un programa C o C ++. exit(1)
en realidad, puede indicar una terminación exitosa en VMS, por ejemplo.
Si vas a usar EXIT_FAILURE
cuando su programa falla, entonces también puede usar EXIT_SUCCESS
cuando tiene éxito, solo por el bien de la simetría.
Por otro lado, si el programa nunca indica un fallo, puede utilizar 0
o EXIT_SUCCESS
. Ambos están garantizados por el estándar para indicar una finalización exitosa. (Es apenas posible que EXIT_SUCCESS
podría tener un valor distinto de 0, pero es igual a 0 en todas las implementaciones de las que he oído hablar).
Utilizando 0
tiene la pequeña ventaja de que no necesitas #include <stdlib.h>
en C, o #include <cstdlib>
en C ++ (si está usando un return
declaración en lugar de llamar exit()
) – pero para un programa de cualquier tamaño significativo, incluirá stdlib directa o indirectamente de todos modos.
De hecho, en C comenzando con el estándar de 1999, y en todas las versiones de C ++, llegando al final de main()
hace un implícito return 0;
de todos modos, por lo que es posible que no necesite utilizar 0
o EXIT_SUCCESS
explícitamente. (Pero al menos en C, considero una explícita return 0;
para tener mejor estilo.)
(Alguien preguntó acerca de OpenVMS. No lo he usado en mucho tiempo, pero como recuerdo, los valores de estado impares generalmente denotan éxito, mientras que los valores pares denotan falla. Los mapas de implementación de C 0
para 1
, así que eso return 0;
indica terminación exitosa. Otros valores se pasan sin cambios, por lo que return 1;
también indica una terminación exitosa. EXIT_FAILURE
tendría un valor par distinto de cero).
Eso no importa. Ambos son iguales.
Cotizaciones estándar de C ++:
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.
0 es, por definición, un número mágico. EXIT_SUCCESS es casi universalmente igual a 0, felizmente. Entonces, ¿por qué no regresar / salir 0?
salir (EXIT_SUCCESS); tiene un significado muy claro.
salir (0); por otro lado, es contradictorio de alguna manera. Alguien que no esté familiarizado con el comportamiento del shell podría asumir que 0 == falso == malo, al igual que cualquier otro uso de 0 en C. Pero no, en este caso especial, 0 == éxito == bueno. Para los desarrolladores más experimentados, no será un problema. Pero, ¿por qué hacer tropezar al chico nuevo sin ninguna razón?
tl; dr: si hay una constante definida para su número mágico, casi nunca hay una razón para no usar la constante en primer lugar. Es más fácil de buscar, a menudo más claro, etc. y no le cuesta nada.