Perché int main () {} compilare?

(Sto usando Visual C ++ 2008) Ho sempre sentito che main () è necessario per restituire un intero, ma qui non ho inserito il risultato return 0; e ed è compilato con 0 errori e 0 avvisi! Nella finestra di debug si dice che il programma è uscito con il codice 0. Se questa funzione ha un nome diverso da main (), il compilatore si lamenta dicendo “blah” deve restituire un valore. Attaccare un return; fa anche apparire l’errore. Ma lasciandolo completamente fuori, compila bene.

 #include  using namespace std; int main() { cout << "Hey look I'm supposed to return an int but I'm not gonna!\n"; } 

Potrebbe essere un bug in VC ++?

3.6.1 Funzione principale

….

2 Un’implementazione non deve predefinire la funzione main . Questa funzione non deve essere sovraccaricata. Deve avere un tipo di ritorno di tipo int , ma in caso contrario il suo tipo è definito dall’implementazione. Tutte le implementazioni devono consentire entrambe le seguenti definizioni di principali:

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

e

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

…. e continua ad aggiungere …

5 Un’istruzione return in main ha l’effetto di lasciare la funzione main (distruggere qualsiasi object con durata di archiviazione automatica) e chiamare exit con il valore di ritorno come argomento. Se il controllo raggiunge la fine di main senza incontrare un’istruzione return, l’effetto è quello dell’esecuzione return 0 ;

tentando di trovare una copia online dello standard C ++ in modo da poter citare questo passaggio ho trovato un post sul blog che riporta tutti i bit giusti meglio di quanto potrei.

Questo fa parte dello standard di linguaggio C ++. Un ritorno implicito 0 viene generato per te se non ci sono dichiarazioni di ritorno esplicite in main.

Sono abbastanza sicuro che VC ++ inserisca un return 0 se non ne includi uno nelle funzioni principali. La stessa cosa può succedere anche con le funzioni, ma in questi casi almeno riceverai un avvertimento.

La sezione 6.6.3 / 2 afferma: “Scorrere alla fine di una funzione equivale a un ritorno senza valore, il che comporta un comportamento non definito in una funzione di ritorno del valore.”.

Un esempio è il codice sotto il quale, nella migliore delle ipotesi, viene visualizzato un avviso su VS 2010 / g ++

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

Quindi il punto è che “main” è speciale, come hanno sottolineato le precedenti risposte.