条件付き取り込みについて調べてみました。
#if、#elif、#else、#endif等の
プリプロセッサ指令を使うことにより、
ソースコードの条件付き取り込みを行うことができる。
#if、#elifに続く取り込みを制御する式は
整数定数式でなければならない。
その式は、キャストを含んではならない。
define演算子を用いた、
defined 識別子あるいはdefined (識別子)という表現は可能。
この時、識別子がマクロ名として定義されていれば
制御式を1と評価する。そうでない場合は0と評価する。
制御式の評価結果が0以外ならば、
その間にあるソースコードはコンパイル対象となる。
制御式中のマクロ置換は、
(defined演算子のオペランドになるマクロ名を除く)
評価の前に行われる。
この変換で、字句definedが生成される場合の動作は未定義。
#ifdefと#ifndefは、それぞれ
#if defined 識別子、#if !defined 識別子と等価。
条件付き取り込みを入れ子にすることは可能。
#if、#elif、#else、#endif等の
プリプロセッサ指令を使うことにより、
ソースコードの条件付き取り込みを行うことができる。
#if、#elifに続く取り込みを制御する式は
整数定数式でなければならない。
その式は、キャストを含んではならない。
define演算子を用いた、
defined 識別子あるいはdefined (識別子)という表現は可能。
この時、識別子がマクロ名として定義されていれば
制御式を1と評価する。そうでない場合は0と評価する。
制御式の評価結果が0以外ならば、
その間にあるソースコードはコンパイル対象となる。
制御式中のマクロ置換は、
(defined演算子のオペランドになるマクロ名を除く)
評価の前に行われる。
この変換で、字句definedが生成される場合の動作は未定義。
#ifdefと#ifndefは、それぞれ
#if defined 識別子、#if !defined 識別子と等価。
条件付き取り込みを入れ子にすることは可能。
コメント