Ist main() wirklich der Ausgangspunkt eines C-Programms?
Der C-Standard erklärt in Abschnitt 3.6.1/1 dass ein Programm eine globale Funktion namens main besitzen muss, die als festgelegter Ausgangspunkt dient. Eine weitere Analyse und ein anschauliches Codebeispiel haben jedoch die Gültigkeit dieser Aussage in Frage gestellt.
Betrachten Sie den folgenden 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 Code erfüllt seinen beabsichtigten Zweck: Er gibt die Quadrate aus von ganzen Zahlen von 0 bis 9. Das Rätselhafte daran liegt jedoch darin, dass die Funktion user_main() vor main() ausgeführt wird, das angeblich der Ausgangspunkt des Programms ist. Das Kompilieren dieses Codes mit der Option -pedantic unter Verwendung von GCC 4.5.0 löst keine Fehler oder Warnungen aus.
Diese Beobachtung wirft die Frage auf: Entspricht dieser Code dem Standard?
Um diese Frage zu beantworten: Wir müssen tiefer in die Bedeutung des Ausdrucks „Start des Programms“ eintauchen. Der Standard definiert diesen Begriff speziell für den Kontext des Standards selbst. Es wird nicht behauptet, dass kein Code vor main() ausgeführt werden kann. Stattdessen wird festgestellt, dass der Anfang des Programms der Punkt ist, an dem main() beginnt.
Im Fall dieses Beispielcodes wird user_main() laut Definition ausgeführt, bevor das Programm „startet“. vom Standard bereitgestellt. Daher ist dieser Code vollständig konform. Bedingt durch das Design wird bedeutender Code häufig ausgeführt, bevor main() aufgerufen wird, einschließlich dieses Beispiels.
Daher entsteht das Missverständnis durch eine Fehlinterpretation der Definition des Standards. Aus Gründen der Standarddiskussion wird user_main() ausgeführt, bevor das Programm „startet“, und dieses Verhalten bleibt vollständig konform mit dem Standard.
Das obige ist der detaillierte Inhalt vonMarkiert „main()' immer den wahren Beginn der Ausführung eines C-Programms?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!