このページの内容

2.6.4 If-then-else書式の詳細

両方のファイルに共通する行には、diffは未変更行グループ書式を使います。マージ出力書式の差分の各hunkについて、最初のファイルの行だけを含む場合、diffは古い行グループ書式を使います。2番目のファイルの行だけを含む場合、diffは新しいグループ書式を使います。それ以外の場合、diffは変更グループ書式を使います。

古い行書式、新しい行書式、未変更行書式は、それぞれ最初のファイルの行、2番目のファイルの行、両方に共通する行の出力書式を指定します。

--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オプションと似た動作をしますが、ファイルとdiffを使ってマージされたファイルを作る点が異なります。patchのオプションを参照してください。