次: , 前: Line Formats, 上: If-then-else


2.6.3 If-then-else書式の詳細な説明

両方のファイルで共通の行に対し,diffは変更されていない行のグルー プ書式を使用します.マージされた出力書式の差異部分のそれぞれのhunkに対し, hunkが最初のファイルの行だけを含んでいる場合,diffは古い行のグ ループ書式を使用します.hunkが二番目のファイルの行だけを含んでいる場合, diffは新しい行のグループ書式を使用します.それ以外の場合, diffは変更されたグループ書式を使用します.

古いもの,新しいもの,そして変更されている行の書式はそれぞれ,最初のファ イルの行,二番目のファイルの行,そして両方のファイルに共通の行の出力書式 を指定します.

オプション--ifdef=nameは,以下のシェルの構文を使用した連 続したオプションと等価です.

     --old-group-format='#ifndef name
     %<#endif /* ! name */
     ' \
     --new-group-format='#ifdef name
     %>#endif /* name */
     ' \
     --unchanged-group-format='%=' \
     --changed-group-format='#ifndef name
     %<#else /* name */
     %>#endif /* name */
     '

適切に入れ子状にするため,diffの出力を注意深く調べるべきです. 例えば,-D name--ifdef=nameオプションを 使用するとき,差異のある行がCのプリプロセッサの指示語の`#ifdef', `#ifndef',`#else',`#elif',または`#endif'を含んで いるかどうかを調べるべきで,それらはおそらく入れ子状になっているのでマッ チします.そうでない場合,手動で正しくする必要があります.望んだように本 当になっていることを確実にするため,コードの結果を注意深く調べるのは良い 考えです.入力ファイルが生成される方法に依存して,出力が二重になったもの が含まれたり,正しくないコードになったりします.

patch -D nameオプションは,ファイルとマージされ たファイルを生成する差分で処理を行なう以外,diff -D nameと同じように動作します.See patch Options.