UNIFDEF(1)

名称
unifdef - #ifdef 行を取り除く

書式
unifdef [-clt] [ -Dsym -Usym -iDsym -iUsym] ... [file]

解説
unifdef はファイルから #ifdef された行を削除する場合に用いられます。 unifdef は #ifdef, #ifndef, #else, #endif 行を解釈します。 unifdef にはコメント、クォート(シングルクォートとダブルクォート)で 無効になるこれらのプリプロセッサマクロを 判断するために必要な最小限の C 言語の知識しかありません。 クォートの解析は非常に単純です。クォートに遭遇すると (エスケープされたクォートを除いて) 対応するクォートが 出現するまでの部分を全て無視します。途中でエスケープされていない 改行が存在しても警告はしません。

オプション
-Dsym
-Usym
    指定したシンボルを定義する、または未定義にすることを指定します。 シンボルを定義するように指定した場合 ifdef で囲まれたブロックは 出力され、未定義を指定した場合は削除されます。 指定されたシンボル sym に対応する ifdef、ifndef、else、endif 行は削除されます。 指定しなかったシンボルに関する ifdef や if 行は、対応 する ifdef、else、endif 行とともに、そのまま出力されます。 ifdef X が別の ifdef X 中に出現した場合、内側の ifdef は指定しなかった シンボルに関する ifdef と同等に扱われます。同じシンボルを複数指定した 場合は最後の指定が有効となります。

-c  unifdef の効果を逆転します。すなわち、通常削除されるべき行を残し、 残されるべき行を削除します。

-l  削除される部分を空行で置き換えます。
-t  C 言語のコメントとクォートの解釈を禁止します。通 常のテキストファイル等に unifdef を適用する場合に有用です。

-iDsym
-iUsym
    無視すべき ifdef を指定します。C 言語コードで、ifdef を C 言語ではない 部分やコメントや作りかけのコードを区切るために用いている場合は、その内 部のクォートやコメントを無視するように指示する必要があります。無視すべき ifdef は -Dsym や -Usym と同様の方法で指定します。

unifdef は標準出力に出力を行い、ファイル名が指定されなかった場合は標準 入力を使用します。

unifdef は、4.1 BSD の diff(1) の -Dsym オプションとともに使用することができます。

関連項目
diff(1)

診断
不適切な else または endif を検出します。
#ifdef に対応する #endif が現れる前にファイルが終了したとき、 その #ifdef のある行番号を検出します。
入力と出力が同一になる場合 0、そうでなければ 1、エラー時には 2 を終了ステータスとして返します。

バグ
unifdef が `#if' を処理できるようにするべきです。

ヌル文字を含む入力の場合には正しく動作しません。

歴史
unifdef は 4.3BSD から登場しました。