#ifdef
文に対してより一般的な #if
文も用意されてい
ます。この場合、#if
の後ろには定数式を指定します。定数式
には、プログラム中の変数などは使えない点に注意しましょう(プログラム
がコンパイルされる以前に処理されるのですから当然ですね)。
最も良く使われるのが、defined()
文と共に使う場合です。
defined()
はマクロ定義がされいているか否かを判別します。
マクロ定義がされていない場合の判別には、否定演算 !
と共に
!defined()
のように使います。例えば、次の例では
マクロ定義 List または LIST が定義されている場合に有効になるような
例です。
#if defined(List) || defined(LIST) struct List { struct List *next; void *data; }; typedef struct List LIST; #endif |
このように ||
や &&
などの演算や、比較は
プリプロセッサでも使う事が出来ます。次の例は数値を比較している
場合です。
#if defined(BSIZE) && ( BSIZE < 512 ) #undef BSIZE #define BSIZE 1024 #endif |
この場合、マクロ定義 BSIZE があり、それが 512 より小さいならば、 その定義を 1024 に変更しています。