Heim > Backend-Entwicklung > C++ > Markiert „main()' immer den wahren Beginn der Ausführung eines C-Programms?

Markiert „main()' immer den wahren Beginn der Ausführung eines C-Programms?

Patricia Arquette
Freigeben: 2024-12-05 09:55:15
Original
673 Leute haben es durchsucht

Does `main()` Always Mark the True Beginning of a C   Program's Execution?

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage