La section $3.6.1/1 de la Norme C++ lit,
Un programme doit contenir un mondial fonction appelée principal, qui est le désigné début du programme.
Considérons maintenant ce code,
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;
}
Cet exemple de code fait ce que j'ai l'intention de faire, je.e l'impression de les carrés des entiers de 0 à 9, avant d'entrer dans l' main()
fonction qui est censé être le "début" du programme.
Jetez un oeil à la sortie de ici : http://www.ideone.com/Niy0R
J'ai également compilé avec -pedantic
option, GCC 4.5.0. Il ne donne aucune erreur, même pas attention!
Donc ma question est,
Est-ce code vraiment Standard conforme?
Si c'est standard conforme, alors n'est-il pas de nature à infirmer ce que dit la Norme? main()
n'est pas le début de ce programme de! user_main()
exécutée avant l' main()
.
Je comprends que pour initialiser la variable globale main_ret
, use_main()
s'exécute en premier, mais c'est complètement autre chose; le fait est que, il ne invalider la cité instruction $3.6.1/1 de la Norme, main()
n'est PAS le début du programme; c'est en fait la fin de ce programme de!
EDIT:
Comment définissez-vous le mot "démarrer"?
Il se résume à la définition de l'expression "début du programme". Alors, comment exactement ne vous le définir?