93 votes

Déclarations de variables dans les fichiers d'en-tête - statiques ou non ?

Lors de la refactorisation de certains #defines Je suis tombé sur des déclarations similaires à la suivante dans un fichier d'en-tête C++ :

static const unsigned int VAL = 42;
const unsigned int ANOTHER_VAL = 37;

La question est de savoir quelle différence, le cas échéant, fera la statique. Notez que l'inclusion multiple des en-têtes n'est pas possible en raison de la classique #ifndef HEADER #define HEADER #endif (si cela compte).

Est-ce que le statique signifie qu'une seule copie de VAL est créé, dans le cas où l'en-tête est inclus par plus d'un fichier source ?

0 votes

0voto

Jim Buck Points 10839

La statique empêche une autre unité de compilation d'externaliser cette variable, de sorte que le compilateur peut simplement "mettre en ligne" la valeur de la variable à l'endroit où elle est utilisée et ne pas créer de stockage mémoire pour elle.

Dans votre deuxième exemple, le compilateur ne peut pas supposer qu'un autre fichier source ne l'externera pas, il doit donc stocker cette valeur en mémoire quelque part.

-2voto

Superpolock Points 926

La statique empêche le compilateur d'ajouter des instances multiples. Cela devient moins important avec la protection #ifndef, mais en supposant que l'en-tête soit inclus dans deux bibliothèques distinctes, et que l'application soit liée, deux instances seraient incluses.

Prograide.com

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.

Powered by:

X