J'ai besoin de savoir que la directive #define en C++ déclare un label global? Par global, je veux dire visible dans tous les fichiers?Pré-processeur C++ #define
J'utilise Visual Studio 2008, (devinez si cela importe)
J'ai besoin de savoir que la directive #define en C++ déclare un label global? Par global, je veux dire visible dans tous les fichiers?Pré-processeur C++ #define
J'utilise Visual Studio 2008, (devinez si cela importe)
Non, seulement dans l'unité de traduction en cours.
I.e. chaque fichier qui a #define
, ou inclut un fichier qui a le #define
verra la définition.
Modifier, pour répondre à votre commentaire: pour obtenir une définition dans chaque fichier, soit le mettre dans un en-tête qui est inclus partout, soit utiliser une option du compilateur pour obtenir des définitions ajoutées.
par exemple. pour gcc on ferait
gcc -Dthedefine=itsvalue
Je ne sais pas comment on spécifie une telle inclusion dans VC++, mais je suis sûr que c'est possible d'une façon ou d'une autre.
Il ne sera que défini dans le fichier que vous définissez ou dans les fichiers contenant ce fichier
Le remplacement de la directive #define jeton-chaîne pour toutes les ultérieures occurrences d'un identifiant dans le fichier source. L'identificateur est remplacé uniquement lorsqu'il forme un jeton. Par exemple, l'identificateur n'est pas remplacé s'il apparaît dans un commentaire , dans une chaîne, ou comme partie d'un identificateur plus long.
Il est pas global, il est juste pour le fichier en cours/source
Symbole, défini par "#define" est visible depuis la place de la directive à la fin de la traduction unité (ou au "#undef" le plus proche pour ce symbole). Par exemple, si vous définissez quelque chose dans le fichier "file.h", ce symbole est vu dans "file.h" et dans chaque fichier, qui inclut "file.h", direct ou indirect ...
vous avez défini dans un fichier ne sera visible dans un autre fichier que si vous avez inclus le fichier avec la macro, donc ce n'est pas automatiquement global. En règle générale, pour cette raison, les macros doivent être définies dans vos fichiers d'en-tête de manière à pouvoir faire un #include "headerFile.h".
Une directive #define
fera la définition à partir de ce moment, jusqu'à ce que la compilation soit terminée - gardez à l'esprit que chaque .cpp compte comme une unité de compilation séparée.
Pour définir quelque chose à travers les fichiers sources, il aurait besoin d'être dans un fichier d'en-tête que tous les fichiers source sont
#define
ne fonctionne que dans l'unité de traduction, il est défini. Avec les fichiers d'en-tête partagés entre les unités de traduction, qui pourrait être plusieurs fichiers. Cependant, pour le rendre vraiment global, vous avez besoin d'une extension Visual Studio. L'option de ligne de commande/D vous permet de passer l'équivalent de #define
au préprocesseur, et vous pouvez les placer dans votre page de propriétés de votre projet.C'est presque "aussi global que possible"; Pour les solutions multi-projets, vous pouvez utiliser des feuilles de propriétés de projet héritées partagées.
Vous pouvez également configurer une feuille de propriétés de studio visuel, qui est soutenue par un fichier .vsprops, et l'affecter aux projets pertinents de votre solution. Cela vous permet de gérer facilement les paramètres courants de nombreux types sur plusieurs projets, même s'ils se trouvent dans des fichiers de solutions discrètes.
http://msdn.microsoft.com/en-us/library/a4xbdz1e%28VS.80%29.aspx
hmmmm, comment puis-je faire que globale dans tous les fichiers? – akif
#include "Global.h" dans chaque fichier. – Goz
inclure votre fichier d'en-tête aveC# définir dans chaque fichier. Pensez à utiliser l'en-tête précompilé ... – SadSido