Previous: Scripts, Up: Output Formats


2.6 If-then-elseを用いたファイルのマージ

二つのCソースコードをマージするためにdiffを使用することが可能 です.この書式のdiffの出力は,両方のファイルのすべての行を含み ます.両方のファイルに共通の行は,一回だけ出力されます.差異のある部分は, Cプリプロセッサの指示語の#ifdef name#ifndef name#else,そして#endifで分離されています.出力を コンパイルするとき,マクロnameを定義したり未定義にしたりすることで, バージョンを選択します.

二つのファイルをマージするために,-D name--ifdef=nameオプションを用いてdiffを使用してく ださい.引数のnameは,#ifdef#ifndefといった指示語 で使用するCプリプロセッサの識別子です.

例えば,wait (&s)の文をwaitpid (-1, &s, 0)に変更し,新旧の ファイルを--ifdef=HAVE_WAITPIDオプションを用いてマージした場合, 影響する部分のコードは以下のようになるでしょう.

         do {
     #ifndef HAVE_WAITPID
             if ((w = wait (&s)) < 0  &&  errno != EINTR)
     #else /* HAVE_WAITPID */
             if ((w = waitpid (-1, &s, 0)) < 0  &&  errno != EINTR)
     #endif /* HAVE_WAITPID */
                 return w;
         } while (w != child);

次のセクションで説明する,行のグループを使用した書式と,行の書式を使用す ることで,C以外の言語に対する書式を指定することが可能です.