Pour répondre à la question "la statique signifie-t-elle qu'une seule copie de VAL est créée, dans le cas où l'en-tête est inclus par plus d'un fichier source ?"...
NON . VAL sera toujours défini séparément dans chaque fichier qui inclut l'en-tête.
Les normes pour C et C++ font une différence dans ce cas.
En C, les variables à l'échelle du fichier sont externes par défaut. Si vous utilisez le langage C, VAL est statique et ANOTHER_VAL est externe.
Notez que les linkers modernes peuvent se plaindre de ANOTHER_VAL si l'en-tête est inclus dans différents fichiers (même nom global défini deux fois), et se plaindraient certainement si ANOTHER_VAL était initialisé à une valeur différente dans un autre fichier.
En C++, les variables orientées fichier sont statiques par défaut si elles sont const, et externes par défaut si elles ne le sont pas. Si vous utilisez C++, VAL et ANOTHER_VAL sont toutes deux statiques.
Vous devez également tenir compte du fait que les deux variables sont désignées par const. Idéalement, le compilateur choisirait toujours de mettre ces variables en ligne et de ne pas inclure de stockage pour elles. Il existe toute une série de raisons pour lesquelles le stockage peut être alloué. Celles auxquelles je pense...
- options de débogage
- adresse prise dans le dossier
- le compilateur alloue toujours du stockage (les types const complexes ne peuvent pas facilement être inlined, donc devient un cas spécial pour les types de base)
0 votes
Liés : stackoverflow.com/questions/177437/