2009-09-09 6 views
5

C++の#defineディレクティブはグローバルラベルを宣言していますか?グローバルでは、すべてのファイルに表示されますか?C++ #defineプリプロセッサ

私は、唯一の現在の翻訳単位で、ノー

答えて

9

(それが重要ならば推測)のVisual Studio 2008を使用しています。

I.e. #defineのファイル、または#defineのファイルを含むすべてのファイルに定義が表示されます。

あなたのコメントに答えるには:すべてのファイルに定義を取得するには、どこにもインクルードされるヘッダに入れるか、いくつかのコンパイラオプションを使用して定義を追加します。

gccの場合は

gcc -Dthedefine=itsvalue 

VC++のように指定する方法がわかりませんが、どういうわけかはわかります。

+0

うーむ、どのように私はすべてのファイルにそれがグローバル作るのですか? – akif

+2

すべてのファイルで#include "Global.h"。 – Goz

+0

にはすべてのファイルにヘッダファイル#defineが含まれています。プリコンパイルされたヘッダーを使用することを検討してください。 – SadSido

1

それが唯一あなたがそれを定義するファイルまたはそのファイル

3

内の識別子のすべての後続 の出現のための#defineディレクティブ代替 トークン文字列が含まれるファイルで定義されますソースファイル。識別子は、トークンを形成するときにのみ置換される です。 コメント( リファレンスのC++トークンを参照してください)たとえば、識別子 は、 コメント、文字列、またはより長い識別子の一部の に表示される場合、置換されません。

それはグローバルではありません、「の#define」により定義され、それは単に現在のファイル/ソースの

define in msdn

2

あるシンボルは、翻訳の最後に指令の場所から見えますユニット(またはこのシンボルに最も近い "#undef")に移動します。たとえば、 "file.h"ファイル内に何かを定義すると、このシンボルは "file.h"と "file.h"を含むすべてのファイルに表示されます。

1

何らかのマクロあるファイルに定義されているファイルは、そのファイルにマクロが含まれている場合にのみ別のファイルに表示されるため、自動的にはグローバルではありません。一般的に、この理由から、ヘッダファイルにマクロを定義し、#include "headerFile.h"を実行できるようにする必要があります。

1

#defineディレクティブは、コンパイルが完了するまで、その時点からの定義を行います。ただし、各.cppは別々のコンパイル単位としてカウントされます。

は、ソースファイル間で何かを定義するには、それはすべてのソースファイルのみ、それはで定義されています翻訳単位で

2

#define作品が含まれているヘッダファイルにする必要があります。ヘッダファイルは翻訳単位間で共有すると、その可能性複数のファイルにする。

しかし、本当にグローバルにするには、Visual Studio拡張機能が必要です。/Dコマンドラインオプションを使用すると、#defineに相当するものをプリプロセッサに渡すことができ、プロジェクトのプロパティページにこれらを入れることができます。それはほぼ「それが得られるほどグローバル」です。マルチプロジェクトソリューションでは、継承したプロジェクトプロパティシートを共有することができます。

1

また、.vspropsファイルに裏打ちされたビジュアルスタジオのプロパティシートをセットアップして、ソリューション内の関連するプロジェクトに割り当てることもできます。

これにより、個別のソリューションファイルに含まれていても、複数のプロジェクト間で多くのタイプの共通設定を簡単に維持できます。

http://msdn.microsoft.com/en-us/library/a4xbdz1e%28VS.80%29.aspx

関連する問題