(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 tipoint
, 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
inmain
ha l’effetto di lasciare la funzione main (distruggere qualsiasi object con durata di archiviazione automatica) e chiamareexit
con il valore di ritorno come argomento. Se il controllo raggiunge la fine dimain
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.