Maison > développement back-end > C++ > `main()` marque-t-il toujours le véritable début de l'exécution d'un programme C ?

`main()` marque-t-il toujours le véritable début de l'exécution d'un programme C ?

Patricia Arquette
Libérer: 2024-12-05 09:55:15
original
675 Les gens l'ont consulté

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

Main() est-il vraiment le point de départ d'un programme C ?

La norme C, dans la section 3.6.1/1, déclare qu'un programme doit posséder une fonction globale nommée main, qui sert de point de départ désigné. Cependant, une analyse plus approfondie et un exemple de code illustratif ont remis en question la validité de cette déclaration.

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 atteint son objectif : il affiche les carrés d'entiers de 0 à 9. Cependant, l'aspect déroutant réside dans le fait que la fonction user_main() s'exécute avant main(), qui est censée être le point de départ du programme. La compilation de ce code avec l'option -pedantic à l'aide de GCC 4.5.0 ne génère aucune erreur ni avertissement.

Cette observation soulève la question : ce code est-il conforme à la norme ?

Pour répondre à cette question, nous devons approfondir le sens de l'expression « début du programme ». La Norme définit ce terme spécifiquement pour le contexte de la Norme elle-même. Il n'affirme pas qu'aucun code ne peut s'exécuter avant main(). Au lieu de cela, il établit que le début du programme est le point auquel main() commence.

Dans le cas de cet exemple de code, user_main() s'exécute avant le "démarrage" du programme, selon la définition fournies par la norme. Par conséquent, ce code est entièrement conforme. De par sa conception, un code important s'exécute souvent avant l'appel de main(), y compris dans cet exemple.

Par conséquent, l'idée fausse découle d'une mauvaise interprétation de la définition de la norme. Pour le bien des discussions du Standard, user_main() est exécuté avant le « démarrage » du programme, et ce comportement reste entièrement conforme au Standard.

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