# Définir la scope de la bibliothèque?

Disons que j’ai une constante:

#define PI 3.14 

Disons que j’ai une bibliothèque statique avec plusieurs fichiers d’en-tête et source. Si je déclare cela dans le fichier d’en-tête, sa scope s’appliquera-t-elle à tous les fichiers sources? Ou les fichiers source doivent-ils inclure l’en-tête avec la déclaration de PI ?

Ils devront inclure le fichier contenant #define PI 3.14, sinon le préprocesseur ne lira pas la ligne #define et la compilation échouera par la suite.

En C ++, un bon moyen de penser au processus de compilation est que chaque fichier C ++ individuel est d’abord exécuté via un préprocesseur, qui récupère toutes les instructions #define, #include et autres préprocesseurs et les remplace dans le code, puis est compilé (à ce point, le fichier C ++ et tout ce qui est importé via #include sont traités presque comme s’il s’agissait d’un seul fichier très volumineux), puis après cela, un éditeur de liens prend la sortie finale de l’étape de prétraitement / compilation pour tous les fichiers C ++ et les assemble. les dans un fichier de sortie final. Le préprocesseur (qui gère les définitions) fonctionne avant la compilation, pas pendant la liaison.

La définition doit être incluse dans chaque module.

Techniquement, il n’a pas de “scope”. Ce n’est qu’une opération de remplacement de texte qui a lieu avant la compilation. Vous pouvez également rechercher dans les parameters de votre compilateur un moyen de spécifier des définitions de pré-processeur. C’est souvent un paramètre de projet disponible facilement via votre IDE.

Ils devront inclure la définition. Toutefois, si vous en avez besoin pour tous les fichiers, vous pouvez effectuer un basculement au niveau du compilateur.