Je lisais la FAQ sur C ++ et j'ai remarqué une phrase.
main () ne peut pas être en ligne.
Pourquoi est-ce?
Je lisais la FAQ sur C ++ et j'ai remarqué une phrase.
main () ne peut pas être en ligne.
Pourquoi est-ce?
Parce que la norme dit:
[2003: 3.6.1/3]
: La fonction principale ne doit pas être utilisé (3.2) à l'intérieur d'un programme. L' de liaison (3.5) de la mise en œuvre est définie. Un programme qui déclare principal pour être en ligne ou statique est mal formé. Le nom principal est pas autrement réservés. [Exemple: les fonctions de membres de, les classes et les les énumérations peuvent être appelées à main, comme des entités dans d'autres espaces de noms. ]
Et pourquoi faut-il le dire? Parce que c'est d'essayer de laisser autant sur la mise en œuvre de l' main
à la personne .. ainsi, la mise en œuvre .. comme c'est possible, et ne veut pas limiter les implémentations en exigeant que l' inline
valable quand il n'a pas d'intérêt pratique.
Mon ami le comité a confirmé ce:
Il n'y a aucune raison pourquoi une
inline
main()
ne fonctionnerait pas, en soi. [..] Je pouvais avoir un C++ interprète qui peut appeler inlinemain()
. [..] [Mais]inline
/static
main()
sont interdits dans l'ordre, nous l'espérons, pour éviter la confusion. J'ai du mal à imaginer que la raison serait rien d'autre à ce qui a déjà été dit dans [ce Q&A].
BTW, ne confondez pas l' inline
indicateur mot-clé à fait inline fonctions. Vous pouvez marquer une fonction inline
et il ne peut pas être physiquement incorporé.
Donc, même si c'était vrai qu' main
"ne peut pas être inline" (et strictement parlant, il n'est pas vrai, bien que l'in-lining main
serait plutôt maladroit et inutile comme expliqué dans d'autres réponses), il pourrait théoriquement toujours en faveur de la inline
indicateur mot-clé juste fine.
Il n'est pas pour la raison indiquée ci-dessus, et dans litb réponse: cela compliquerait les choses pour aucun avantage réel.
Habituellement main()
est appelé à partir de systèmes d' init()
fonction. Ainsi, il est nécessaire qu'il peut y avoir exactement une définition pour main()
.
Maintenant, si nous le pouvons, inline
le main()
la fonction et de l'inclure dans un fichier d'en-tête, puis, pour chaque unité de traduction, il y aura des définitions différentes pour main()
. Qui n'est pas autorisé. Vous pouvez déclarer main()
en namespace
et inline
. Mais non global main()
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.