UNIFDEF(1) FreeBSD 一般コマンドマニュアル UNIFDEF(1)
名称
unifdef, unifdefall − プリプロセッサ条件行を取り除く |
書式
unifdef [−ceklst] [ |
−Ipath −Dsym[=val] −Usym −iDsym[=val] −iUsym] ...[file]
unifdefall [−Ipath] ... file 解説 |
unifdef ユーティリティは cpp(1) の条件ディレクティブ (前処理指令) を選択 的に処理します。ファイルから削除するように特定されたディレクティブとテキ ストの両方を削除します。そうでない場合はファイルをそのままにしておきま す。 unifdef ユーティリティは #if, #ifdef, #ifndef, #elif, #else, #endif 行に 働きますが、 #if と #elif 行の式文法のよく使われるサブセットしか理解しま せん。コマンドラインで定義されたシンボルの整数値や defined() オペレータが コマンドラインで define したり、undefine したシンボルや演算子 !, <, >, <=, >=, ==, !=, &&, || と括弧で囲まれた式を扱うことができます。より複雑な ものはそのまま無傷で通過させます。 #ifdef と #ifndef ディレクティブはシン ボルがコマンドラインで指定された場合だけ処理されます。その他の場合には変 更されずに、素通りさせます。デフォルトでは、定数式を持つ #if と #elif の 行は無視しますが、コマンドラインに −k フラグを指定することによりこれらを 処理できます。 unifdef ユーティリティにはコメントやバックスラッシュによる行継続で無効に されたディレクティブも理解することができます。また、普通ではない形式のプ リプロセッサディレクティブを指摘することで、レイアウトが変になりすぎても う扱えないことを検知します。 unifdefall シェルスクリプトはファイルから cpp(1) の条件処理ディレクティブ をすべて削除することができます。すべての制御シンボルとその定義 (または未 定義) のリストを得るために、 unifdef −s と cpp −dM を使用します。それから そのファイルを処理するのに適切な引数を付けて unifdef を呼び出します。 利用可能なオプション : |
−Dsym[=val]
定義されるシンボルを指定します。また、オプションで #if と #elif ディレクティブを操作するためにシンボルに与える値を指定します。 −Usym −c −e −k −l −s −t −iDsym[=val] −Ipath unifdef ユーティリティはその出力を stdout にコピーします。 file 引数が指 定されなかった場合は stdin から読み込みます。 unifdef ユーティリティは diff(1) の −Dsym オプションとともに使用すること ができます。 関連項目 |
診断
多過ぎるネストレベルを検出します。 不適切な #elif, #else, #endif を検出します。 分かりにくいプリプロセッサ制御行を検出します。 早過ぎる EOF を検出します (もっとも最近の未完了の #if の行番号を表示しま す)。 コメント中の EOF を検出します。 |
バグ
構文評価がたいへん限定的です。 (コメントまたはバックスラッシュと改行によって) 複数の物理行にまたがるプリ プロセッサ制御行は、すべての状況において正しく扱われるわけではありませ ん。 トライグラフは認識されません。 ソースファイル中の複数の場所で異なった定義を持つシンボルはサポートされま せん。 テキストモードおよび機能無視は、最近の cpp(1) の動作とは対応していませ ん。 |
歴史
unifdef は 4.3BSD から登場しました。 ANSI C サポートは FreeBSD 4.7 で追加 されました。 FreeBSD 10.0 September 24, 2002 FreeBSD 10.0 |