Resumen: No necesariamente tiene que hacerlo, pero debería hacerlo.
En C90, llegando al final de main()
sin ejecutar una declaración return
"el estado de terminación devuelto al entorno de host no está definido". En al menos un sistema que he usado, el estado devuelto es 1, que en ese sistema indica que el programa falló.
C99 agregó una nueva regla, diciendo que al llegar al final main()
devuelve 0. (C++ tiene la misma regla). No todos los compiladores implementan completamente C99, y los que a menudo no se comportan como compiladores C99 por defecto .
Los únicos valores portátiles se puede volver a main()
son 0, EXIT_SUCCESS
y EXIT_FAILURE
(estos dos últimos se definen en <stdlib.h>
0 y EXIT_SUCCESS
indican que el programa tuvo éxito (y EXIT_SUCCESS
se define generalmente como 0);. EXIT_FAILURE
indica que el programa falló. return 1;
es común, pero no portátil; he trabajado en un sistema (VMS), donde un estado de terminación de 1 indica éxito. Si desea que su programa sea portátil, use EXIT_FAILURE
para indicar el error; eso es lo es para. Algunos sistemas y programas definen otros códigos de estado específicos del sistema o específicos de la aplicación.
Para la portabilidad (y, en mi humilde opinión, el estilo), es mejor hacer un return 0;
explícito al final de main()
, aunque no es obligatorio en todas las circunstancias. Es mucho más fácil agregar esa línea de código (que es, en el peor de los casos, inofensiva) que perder tiempo para determinar si lo necesita.
Tenga en cuenta que las definiciones correctas para main()
son:
int main(void) { /* ... */ }
y
int main(int argc, char *argv[]) { /* ... */ }
o equivalente (por ejemplo, puede escribir char **argv
en lugar de char *argv[]
). Es cuestionable si int main() { /* ... */ }
es válido, por razones sutiles no entraré aquí. De nuevo, es más fácil agregar la palabra clave void
que perder tiempo para determinar si lo necesita.
Muchos libros y tutoriales usan void main()
o void main(void)
. Un compilador particular puede elegir permitir esto, pero no es portátil. Ver void main
en un libro o tutorial es una buena señal de que el autor no conoce muy bien el estándar C, y que debe buscar algo más para estudiar.
No es necesario, pero es obligatorio. – Philip