Domanda

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

#include <iostream>
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++?

È stato utile?

Soluzione

3.6.1 Funzione principale

....

2 Un'attuazione non predefinisce il main funzione.Questa funzione non deve essere sovraccaricata.Deve avere un tipo restituito di tipo int, ma per il resto il suo tipo è definito dall'implementazione.Tutte le implementazioni devono consentire entrambe le seguenti definizioni di main:

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

E

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

....e continua ad aggiungere...

5A return dichiarazione in main ha l'effetto di abbandonare la funzione principale (distruggere eventuali oggetti con durata di memorizzazione automatica) e chiamare exit con il valore restituito come argomento. Se il controllo raggiunge la fine di main senza incontrare un'istruzione return, l'effetto è quello di eseguire return 0;

cercando di trovare una copia online dello standard C++ in modo da poter citare questo passaggio Ho trovato un post sul blog che cita tutte le parti giuste meglio di quanto avrei potuto.

Altri suggerimenti

Questo fa parte dello standard del linguaggio C++.Un ritorno implicito 0 viene generato per te se non c'è un'istruzione return esplicita in main.

Sono abbastanza sicuro che VC++ inserisce semplicemente un ritorno 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 avviso.

La sezione 6.6.3/2 afferma: "Lo scorrimento dalla fine di una funzione equivale a un ritorno senza valore;ciò si traduce in un comportamento indefinito in una funzione che restituisce valore.".

Un esempio è il codice seguente che, nella migliore delle ipotesi, fornisce un avviso su VS 2010/g++

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

int main(){
   f();
}

Quindi il punto è che "principale" è speciale, come hanno sottolineato le risposte precedenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top