A seção $ 3.6.1 / 1 do padrão C ++ lê:
Um programa deve conter uma função global chamada main , que é o início designado 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;
}
Este código de exemplo faz o que pretendo fazer, ou seja, imprimir o quadrado de números inteiros de 0 a 9, antes de entrar na main()
função que deveria ser o "início" do programa.
Também o compilei com a -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 do main()
.
Entendo que, para inicializar a variável global main_ret
, o use_main()
executa primeiro, mas isso é uma coisa completamente diferente; o ponto é que, isso não invalida a declaração citada $ 3.6.1 / 1 do Padrão, como main()
não é o início do programa; é na verdade a fim de este 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?
main()
como "início do programa"