Maison > développement back-end > C++ > La fonction `main()` de C marque-t-elle vraiment le *début* de l'exécution du programme ?

La fonction `main()` de C marque-t-elle vraiment le *début* de l'exécution du programme ?

Susan Sarandon
Libérer: 2024-12-09 20:56:18
original
261 Les gens l'ont consulté

Does C  's `main()` Function Truly Mark the *Beginning* of Program Execution?

Main() est-il le véritable début d'un programme C ? Analyser un extrait de code contre-intuitif

Dans le domaine du C, la fonction main() est souvent présentée comme le point de départ de l'exécution du programme. Cependant, un exemple de code particulier remet en question cette hypothèse.

Considérez le code suivant :

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;
}
Copier après la connexion

Ce code imprime apparemment les carrés des entiers de 0 à 9 avant d'entrer dans la fonction apparemment de départ, main (). De plus, il se compile sans erreurs ni avertissements sous l'indicateur -pedantic dans GCC 4.5.0.

Cela soulève la question : ce code adhère-t-il au standard C, qui stipule dans la section 3.6.1/1 que " Un programme doit contenir une fonction globale appelée main, qui est le début désigné du programme ?

Démêler les normes Définition

Pour répondre à cette question, nous devons nous plonger dans la sémantique de la définition de la Norme. La Norme définit le terme « début » dans le contexte de son propre usage. Il ne proclame pas qu'aucun code ne précède l'invocation de main. Il désigne plutôt la fonction principale comme le point à partir duquel le programme commence son exécution.

À cet égard, l'exemple de code est conforme à la norme. Alors que user_main() s'exécute avant le lancement de main(), cela se produit avant que le programme "démarre" selon la définition de la norme.

Conclusion

La séquence inhabituelle d'exécution dans cet extrait de code n'invalide pas l'affirmation du Standard selon laquelle main() marque le début du programme. La définition de « start » dans la norme permet au code du prologue de s'exécuter avant main(), comme l'illustre cet exemple de code intrigant. Par conséquent, le programme reste entièrement conforme malgré son comportement contre-intuitif.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal