#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 に変更しています。