#if および #elif ディレクティブは、 constant_expression の値をゼロと比較します。
.----------------. V | >>-#--+-if---+--constant_expression----token_sequence-+-------->< '-elif-'
定数式の評価が非ゼロ値に評価される場合、 条件の直後にあるコードの行をコンパイラーに渡します。
式がゼロに評価され、条件付きコンパイル・ディレクティブが、 プリプロセッサー #elif ディレクティブを含んでいる場合、#elif および次の #elif またはプリプロセッサー #else ディレクティブとの間にあるソース・テキストが、プリプロセッサーによって選択され、コンパイラーに渡されます。 #elif ディレクティブをプリプロセッサー の #else ディレクティブの後ろに入れることはできません。
すべてのマクロが展開され、defined() の式はすべて処理され、 残りのすべての ID は、トークン 0 に置き換えられます。
テストされる constant_expression は、以下の属性を持つ整定数式でなければなりません。
defined identifier defined(identifier)
次に例を示します。
#if defined(TEST1) || defined(TEST2)
#if TEST >= 1 printf("i = %d¥n", i); printf("array[i] = %d¥n", array[i]); #elif TEST < 0 printf("array subscript out of bounds ¥n"); #endif