c++ - sintaxis - ¿Debe la función int main() devolver un valor en todos los compiladores?
void main c++ para sirve (7)
Aparte de cumplir con un estándar de lenguaje arbitrario, no hay ninguna razón convincente para devolver un valor cuando finaliza la función principal.
Es solo porque los procesos en los sistemas operativos populares tienen una noción de un código de retorno para un proceso que ha finalizado. No es difícil imaginar un sistema operativo donde no es necesario devolver ningún valor. También puede imaginar un mundo en el que 0 sea devuelto implícitamente por todos los procesos a menos que se invalide, en cuyo caso, puede delegar la decisión del código de retorno a una llamada del sistema. (De hecho, tal llamada al sistema ya existe en forma de la función de salida de C).
Esta pregunta ya tiene una respuesta aquí:
- ¿Qué debería devolver main () en C y C ++? 18 respuestas
¿Por qué no es necesario incluir la declaración de retorno al usar int main () en algunos compiladores para C ++? ¿Qué pasa con Turbo C ++?
Como han dicho otras personas, algunos compiladores no requieren que return 0;
explícitamente return 0;
sin embargo, siempre es una buena idea (si es posible). Desaconsejaría el uso de cualquier compilador que no le permita regresar de su función principal.
Me gustaría tener en cuenta que el valor de retorno de int main es muy importante, y en realidad tiene un uso.
El valor de retorno de main a veces se denomina exit status
o error code
de su programa, cero que indica que se completó correctamente. Otros programas y scripts pueden acceder a este código para determinar si su programa se completó correctamente.
Más información aquí: http://en.wikipedia.org/wiki/Exit_status
El estándar dice que main
devolverá 0
si no hay una declaración de return
. Del borrador de la norma C ++, sección 3.6.1
párrafo 5
:
La declaración de retorno en main tiene el efecto de dejar la función principal (destruir cualquier objeto con la duración del almacenamiento automático) y llamar a std :: exit con el valor de retorno como argumento. Si el control llega al final de main sin encontrar una declaración de retorno, el efecto es el de ejecutar
return 0;
El proyecto de norma C99
en la sección 5.1.2.2.3
dice:
Si el tipo de retorno de la función principal es un tipo compatible con int, un retorno de la llamada inicial a la función principal es equivalente a llamar a la función de salida con el valor devuelto por la función principal como su argumento; 10) alcanzando el} que termina la función principal devuelve un valor de 0.
Por lo que puedo decir, la última versión de Turbo C ++ es bastante antigua y no puedo encontrar nada que defina qué estándar es compatible con alguno.
En C ++ y C99 / C11, sin una declaración de retorno en la función principal, es predeterminado devolver 0 ;
§ 3.6.1 Función principal
Una declaración de retorno en main tiene el efecto de dejar la función principal (destruir cualquier objeto con la duración del almacenamiento automático) y llamar a std :: exit con el valor de retorno como argumento. Si el control llega al final de main sin encontrar una declaración de retorno, el efecto es el de ejecutar el retorno 0;
También lea la página wiki de la función principal de C / C ++.
En caso de que el programador no defina un valor de retorno, un retorno implícito 0; al final de la función main () es insertado por el compilador; este comportamiento es requerido por el estándar de C ++.
En C ++, y en C99 y C11, es una regla especial del lenguaje que si el flujo de control llega al final de la función main
, entonces la función implícitamente devuelve 0
.
TC devolverá EXIT_SUCCESS independientemente de que especifique explícitamente o no
main
debe devolver un int
, algunos compiladores, incluido Turbo C ++, pueden permitir otros valores de retorno, notablemente void main
, pero es incorrecto, nunca use eso.
Sin embargo, en C ++, si no devuelve explícitamente un valor en main
, es lo mismo que return 0;
C ++ 11 §3.6.1 Función principal sección 5
Una declaración de retorno en main tiene el efecto de dejar la función principal (destruir cualquier objeto con la duración del almacenamiento automático) y llamar a std :: exit con el valor de retorno como argumento. Si el control llega al final de main sin encontrar una declaración de retorno, el efecto es el de ejecutar
return 0;
Tenga en cuenta que para C, esto solo se admite en C99 y versiones posteriores, pero no en C89.