Pergunta

(Estou usando Visual C++ 2008) Sempre ouvi dizer que main() é obrigatório para retornar um número inteiro, mas aqui não coloquei return 0; e foi compilado com 0 erros e 0 avisos!Na janela de depuração aparece que o programa foi encerrado com o código 0.Se esta função tiver um nome diferente de main(), o compilador reclamará dizendo que 'blá' deve retornar um valor.Colando um return; também faz com que o erro apareça.Mas deixando-o completamente de fora, ele compila perfeitamente.

#include <iostream>
using namespace std;

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

Isso poderia ser um bug no VC++?

Foi útil?

Solução

3.6.1 Função principal

....

2 Uma implementação não deve predefinir o main função.Esta função não deve ser sobrecarregada.Deve ter um tipo de retorno do tipo int, mas caso contrário, seu tipo é definido pela implementação.Todas as implementações devem permitir ambas as seguintes definições de main:

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

e

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

....e continua adicionando ...

5A return declaração em main tem o efeito de sair da função principal (destruir quaisquer objetos com duração de armazenamento automática) e chamar exit com o valor de retorno como argumento. Se o controle chegar ao fim do main sem encontrar uma instrução return, o efeito é executar return 0;

tentando encontrar uma cópia online do padrão C++ para poder citar esta passagem Encontrei uma postagem no blog que cita todas as partes certas melhor do que eu.

Outras dicas

Isso faz parte do padrão da linguagem C++.Um retorno implícito 0 será gerado para você se não houver nenhuma instrução de retorno explícita em main.

Tenho certeza que o VC++ apenas insere um retorno 0 se você não incluir um nas funções principais.A mesma coisa pode acontecer com funções também, mas nesses casos pelo menos você receberá um aviso.

A seção 6.6.3/2 afirma: “Fluir do final de uma função é equivalente a um retorno sem valor;isso resulta em comportamento indefinido em uma função que retorna valor.".

Um exemplo é o código abaixo que, na melhor das hipóteses, avisa no VS 2010/g++

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

int main(){
   f();
}

Portanto, a questão toda é que 'principal' é especial, como apontaram as respostas anteriores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top