O main () é realmente o início de um programa C ++?
A seção $ 3.6.1 / 1 do padrão C ++ lê:
Um programa deve conter uma função global chamadaa Principal, que é o designadocomeçar do programa.
Agora considere este código,
int square(int i) { return i*i; }
int user_main()
{
for ( int i = 0 ; i < 10 ; ++i )
std::cout << square(i) << endl;
return 0;
}
int main_ret= user_main();
int main()
{
return main_ret;
}
Esse código de exemplo faz o que pretendo fazer, ou seja, imprimir o quadrado de números inteiros de 0 a 9,antes entrando nomain()
função que deveria ser o "início" do programa.
Eu também compilei com-pedantic
opção, GCC 4.5.0. Não dá erro, nem aviso!
Então, minha pergunta é:
Esse código é realmente compatível com o padrão?
Se estiver em conformidade com o padrão, não invalida o que o Padrão diz?main()
não é o início deste programa!user_main()
executado antes domain()
.
Eu entendo que para inicializar a variável globalmain_ret
, ause_main()
executa primeiro, mas isso é uma coisa completamente diferente; o ponto é que,faz invalidar a declaração citada $ 3.6.1 / 1 da Norma, conformemain()
NÃO é ocomeçar do programa; é de fato ofim doesta programa!
EDITAR:
Como você define a palavra 'start'?Tudo se resume à definição da frase"início do programa". Então, como exatamente você o define?