条件付き指令の変換

H2cpy が変換できる条件付き指令は、次のとおりです。これらの指令は、入れ子にできます。

#if 指令の直後には、常に定数式が指定されます。この式内のマクロは展開され、定義済み演算子が評価されて、不明な名前はゼロに置換されます。そして、その結果の数式が評価され、数値となります。条件は、式の評価結果がゼロの場合は FALSE、それ以外の値であれば TRUE になります。以降の行は、条件が FALSE の場合は無視され、TRUE であれば変換されます。

#else 指令と #endif 指令は、いずれもその前の #if#ifdef、または #ifndef 指令で指定された条件を反転し、その効果を終了させます。

#elif 指令は、#else 指令とそれに続く #if 指令の組み合わせと基本的に同等です。ただし、#elif の範囲内に入れ子が含まれないこと、および後続する #endif 指令が #elif 以前の #if 指令に対応していないことが条件です。

#ifdef 指令の直後には、常に名前が指定されます。この名前がヘッダー ファイル内や -D オプションで定義済みであれば条件は TRUE、未定義の場合は FALSE になります。条件が FALSE の場合には、後続の行が無視されます。条件が FALSE でない場合は、後続の行が変換されます。#ifndef 指令も、条件の解釈が逆になることを除いて、同様に処理されます。