Der Abschnitt $ 3.6.1 / 1 aus dem C ++ Standard lautet:
Ein Programm muss eine globale Funktion namens main enthalten , die den festgelegten Start des Programms darstellt.
Betrachten Sie nun diesen 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;
}
Dieser Beispielcode macht das, was ich beabsichtige, dh das Quadrat der ganzen Zahlen von 0 bis 9 drucken, bevor er in die main()
Funktion eingeht, die der "Start" des Programms sein soll.
Ich habe es auch mit der -pedantic
Option GCC 4.5.0 kompiliert. Es gibt keinen Fehler, nicht einmal Warnung!
Meine Frage ist also:
Ist dieser Code wirklich standardkonform?
Wenn es standardkonform ist, macht es dann nicht ungültig, was der Standard sagt? main()
ist kein Start dieses Programms! user_main()
vor dem ausgeführt main()
.
Ich verstehe, dass zum Initialisieren der globalen Variablen zuerst main_ret
die use_main()
Ausführung ausgeführt wird, aber das ist eine ganz andere Sache. der Punkt ist , dass es nicht die zitierte Aussage $ 3.6.1 / 1 von der Norm ungültig, da main()
nicht das ist Start des Programms; es ist das in der Tat Ende von diesem Programm!
BEARBEITEN:
Wie definieren Sie das Wort "Start"?
Es läuft auf die Definition des Ausdrucks "Programmstart" hinaus . Wie genau definieren Sie es?
main()
als "Start des Programms"