2010-04-15 5 views
1

Dire que j'ai une constante:# Définir la portée dans toute la bibliothèque?

#define PI 3.14 

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

Répondre

4

Ils devront inclure le fichier contenant #define PI 3.14, sinon le préprocesseur ne lira pas la ligne #define, et par la suite la compilation échouera. En C++, un bon moyen de penser au processus de compilation est que chaque fichier C++ individuel est d'abord exécuté par un préprocesseur, qui prend toutes les instructions #define, #include et autres préprocesseurs et les remplace dans le code, puis compilé (à ce stade, le fichier C++ et tout ce qui est importé via #include sont traités presque comme s'il s'agissait d'un très gros fichier unique), après quoi un éditeur de liens prend la sortie finale du prétraitement/compilation pour tous les fichiers. Fichiers C++ et les assemble en un seul fichier de sortie final. Le préprocesseur (qui gère les définitions) fonctionne avant la phase de compilation, pas pendant le couplage.

+1

Il est probablement plus clair de dire qu'il y a trois étapes: le prétraitement, la compilation et la liaison, et que '# define' et' # include' sont des directives de préprocesseur, donc elles ont lieu avant la compilation. – Cascabel

+0

Jef: Fait, merci – Sukasa

0

Ils auront besoin d'inclure la définition, cependant si vous avez besoin d'une définition à travers tous les fichiers, vous pouvez faire un commutateur de niveau de compilation.

1

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

Techniquement, il n'a pas de "portée". C'est seulement une opération de remplacement de texte qui se produit avant la compilation. Vous pouvez également regarder dans les paramètres de votre compilateur pour un moyen de spécifier les définitions de pré-processeur. C'est souvent un paramètre de projet disponible facilement via votre IDE.

Questions connexes