時々、特定のプロジェクトがコンパイル時に出力に何かを書き込むことがあります。それはMSVC++でMSVC++コンパイル時に "出力"ウィンドウに何かを出力する方法
おかげで実現する方法を
!
#pragma message("Hello World")
時々、特定のプロジェクトがコンパイル時に出力に何かを書き込むことがあります。それはMSVC++でMSVC++コンパイル時に "出力"ウィンドウに何かを出力する方法
おかげで実現する方法を
!
#pragma message("Hello World")
使用#pragma message
例えば:
はあなたのソースコードに次のようなものを含めますあなたは
#pragma MESSAGE("TODO: testing")
はそれが
あなたは出力文字列にソースファイルのいずれかで#pragma messageを使用することができるだけで、通常のコンパイラのメッセージのようにクリック可能なメッセージとして表示されます置けば、その後
#define MESSAGE(t) message(__FILE__ "(" STRINGXXX(__LINE__) ") : " t)
#define STRINGXXX(x) STRINGYYY(x)
#define STRINGYYY(x) #x
そのファイルは前処理されています。
また、カスタムビルド前またはビルド後のステップが実行されると、「description」フィールドが標準出力にエコーされます。
Timo Geuschが言ったように:#pragma message
という指令が使われています。テンプレートメタプログラミングのエキゾチックな副作用として、それは計算機としてコンパイラを使用することも可能です
:)
template<int i> struct Message;
template<int i> struct Fac {
static const int v = i * Fac< i-1 >::v;
};
template<> struct Fac<1> { static const int v = 1; };
Message< Fac<10>::v > m;
は、出力メッセージ
Line 10: error: aggregate 'Message<3628800> m' has incomplete type and cannot be defined
になり、今それは巧妙なトリックです! – xtofl
1つのマクロの代わりにSTRINGXXXとSTRINGYYYを使用するのはなぜですか? – rpg
__LINE__は数字であり、文字列に変換する必要があります。文字列 "__LINE__"がすべての場所にあるのを避けるために、別のマクロを使用します。 –