Saltar al contenido

¿Debo devolver EXIT_SUCCESS o 0 de main ()?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *