[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
2.6 Merging Files with If-then-else
You can use diff
to merge two files of C source code. The output
of diff
in this format contains all the lines of both files.
Lines common to both files are output just once; the differing parts are
separated by the C preprocessor directives #ifdef name
or
#ifndef name
, #else
, and #endif
. When
compiling the output, you select which version to use by either defining
or leaving undefined the macro name.
To merge two files, use diff
with the ‘-D name’ or
‘--ifdef=name’ option. The argument name is the C
preprocessor identifier to use in the #ifdef
and #ifndef
directives.
For example, if you change an instance of wait (&s)
to
waitpid (-1, &s, 0)
and then merge the old and new files with
the ‘--ifdef=HAVE_WAITPID’ option, then the affected part of your code
might look like this:
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); |
You can specify formats for languages other than C by using line group formats and line formats, as described in the next sections.
2.6.1 Line Group Formats | Formats for general if-then-else line groups. | |
2.6.2 Line Formats | Formats for each line in a line group. | |
2.6.3 Detailed Description of If-then-else Format | A detailed description of if-then-else format. | |
2.6.4 An Example of If-then-else Format | Sample if-then-else format output. |