¿Por qué compila int main () {}?
(Estoy usando Visual C++ 2008) Siempre he escuchado que main () es requerido para devolver un entero, pero aquí no puse return 0;
y compiló con 0 errores y 0 advertencias! En la ventana de depuración dice que el programa ha salido con el código 0. Si esta función se llama cualquier otra cosa que no sea main(), el compilador se queja diciendo ' bla ' debe devolver un valor. Pegar un return;
también hace que aparezca el error. Pero dejándolo fuera por completo, compila solo fino.
#include <iostream>
using namespace std;
int main()
{
cout << "Hey look I'm supposed to return an int but I'm not gonna!\n";
}
¿Podría ser un error en VC++?
4 answers
3.6.1 Función principal
....
2 Una implementación no predefinirá la función
main
. Esta función no se sobrecargará. Tendrá un tipo de retorno de typeint
, pero por lo demás su tipo está definido por la implementación. Todas las implementaciones permitirán las dos definiciones siguientes de main:int main() { /* ... */ }
Y
int main(int argc, char* argv[]) { /* ... */ }
.... y sigue sumando ...
5 Una declaración
return
enmain
tiene el efecto de dejar la función principal (destruyendo cualquier objeto con duración de almacenamiento automática) y llamando aexit
con el valor devuelto como argumento. Si control llega al final demain
sin encontrar una sentencia return, el efecto es el de ejecutar return 0;
Tratando de encontrar una copia en línea del estándar C++ para que pudiera citar este pasaje Encontré una entrada de blog que cita todos los bits correctos mejor de lo que pude.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-08 15:18:53
Esto es parte del estándar del lenguaje C++. Se genera un retorno implícito 0 si no hay una declaración de retorno explícita en main.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-22 12:52:03
Estoy bastante seguro de que VC++ solo inserta un retorno 0 si no incluye uno en las funciones principales. Lo mismo puede suceder con las funciones también, pero en esos casos al menos obtendrás una advertencia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-22 12:51:49
La sección 6.6.3/2 establece: "Fluir fuera del final de una función es equivalente a un retorno sin valor; esto resulta en un comportamiento indefinido en una función de retorno de valor.".
Un ejemplo es el código a continuación que en el mejor de los casos da una advertencia sobre VS 2010 / g++
int f(){
if(0){
if(1)
return true;
}
}
int main(){
f();
}
Así que el punto es que 'principal' es especial como las respuestas anteriores han señalado.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-16 11:20:18