Pregunta

(Estoy usando Visual C++ 2008) Siempre he oído que main() es requerido para devolver un número entero, pero aquí no puse return 0; ¡Y se compiló con 0 errores y 0 advertencias!En la ventana de depuración dice que el programa salió con el código 0.Si esta función tiene un nombre distinto de main(), el compilador se queja diciendo que "blah" debe devolver un valor.pegando un return; también hace que aparezca el error.Pero si lo excluye por completo, se compila muy bien.

#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 esto un error en VC++?

¿Fue útil?

Solución

3.6.1 Función principal

....

2 Una implementación no deberá predefinir el main función.Esta función no deberá sobrecargarse.Tendrá un tipo de retorno de tipo int, pero por lo demás su tipo está definido por la implementación.Todas las implementaciones permitirán las dos definiciones siguientes de principal:

int main() { /* ... */ }

y

int main(int argc, char* argv[]) {
/* ... */
}

....y sigue sumando...

5A return declaración en main tiene el efecto de abandonar la función principal (destruyendo cualquier objeto con duración de almacenamiento automático) y llamar exit con el valor de retorno como argumento. Si el control llega al final del main sin encontrar una declaración de devolución, el efecto es el de ejecutar la devolución 0;

intentando encontrar una copia en línea del estándar C++ para poder citar este pasaje Encontré una publicación de blog que cita todos los fragmentos correctos mejor que yo.

Otros consejos

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.

Estoy bastante seguro de que VC++ simplemente 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 recibirás una advertencia.

La sección 6.6.3/2 establece: "Salir del final de una función es equivalente a un retorno sin valor;esto da como resultado un comportamiento indefinido en una función de retorno de valor".

Un ejemplo es el siguiente código que, en el mejor de los casos, advierte sobre VS 2010/g++

int f(){
   if(0){
      if(1)
         return true;
   }
}

int main(){
   f();
}

Entonces, el punto es que 'principal' es especial, como lo han señalado las respuestas anteriores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top