私はいくつかのブール型マクロの定義を含むいくつかの構成ファイルを持っており、0または1に設定されています。コードのどの部分を有効にするかを決定します。ここで難しい部分があります:私は、マクロの定義を含むヘッダーが含まれていることを確認したいと思います。チェックされているとエラーを生成するブール型マクロが定義されていない
次の例では、FOO定義を含むヘッダーファイルを含めるのを忘れた場合、コンパイラは "world!"を出力しますが、代わりにエラーが発生します。
//in the configuration header file
#define FOO 1
//in a cpp file
#if FOO //I would like this to generate an error if I forgot to include the header file
#pragma message "Hello"
#else
#pragma message "world!"
#endif
このような動作は可能ですか?どうやって?明確にするために
、私はhow to generate an error if a macro is not definedを求めていないのですが、それはそのよう#if FOO
ラインを変換することが可能である場合には、同時に、それはブール値をチェックし、FOO
が定義されていない場合は、エラーを生成します。
これを持っていることのポイントは、開発者が自分のコードが
それは#if FOO
の文であるかのように、同時に、FOOのブール値をチェックし、
SPECIAL_MACRO(FOO)
、および防止が含まれている必要があることを知っているだろうということでしょう彼らはFOO
を定義するヘッダーの包含を忘れていないからです。
C++ 11以降、 'static_assert'を使うことができます –
なぜ'#ifdef'を使わないのですか? – Petr
[Cプリプロセッサでエラーと警告を生成する方法は?](http:// stackoverflow。コム/質問/ 2221517 /ハウツー-生成-エラーと警告・イン・Cプリプロセッサ) –