UNIFDEF(1)UNIFDEF(1)NAMEunifdef - strip or reduce ifdefs in C code
SYNOPSISunifdef [-Dname] [-Dname=string] [-Uname] [-ooutput] [-z] [input...]
DESCRIPTION
Unifdef reads C source files and prints all input lines except those
excluded by #ifdef constructs that refer to specified identifiers.
The -D option defines name as a macro with the value 1, causing unifdef
to simplify
#ifdef name
Included text
#else
Excluded text
#endif
to just
Included text
and contrariwise for #ifndef.
The -U option works like -D except that name is undefined, so the #ifdef
above would simplify to
Excluded text
-Dname=string causes unifdef to replace occurrences of name with string
when evaluating #if and #elif expressions. For example, unifdef -DBSD=43
would rewrite
#if BSD == 43
4.3BSD code
#elif BSD == 42
4.2BSD code
#endif
as
4.3BSD code
All #ifdef constructs that refer to names not defined with -D or
undefined with -U are passed unchanged to output. Unifdef simplifies #if
expressions that mix defined or undefined names with unknown names to
Page 1
UNIFDEF(1)UNIFDEF(1)
express operations on just the unknown names. Thus unifdef-Dsgi would
rewrite
#if defined sgi && !defined KERNEL
as
#ifndef KERNEL
and would preserve associated #else and #endif sections. Unifdef
simplifies #elif chains as if they consisted of #if constructs nested
within #else sections. For example, unifdef -DBSD=43 would rewrite
#if SYSV
System V code
#elif BSD == 42
4.2BSD code
#elif BSD == 43
4.3BSD code
#elif XENIX
Xenix code
#endif
as
#if SYSV
System V code
#else
4.3BSD code
#if XENIX
Xenix code
#endif
#endif
Unifdef rewrites #else and #endif lines to conform to ANSI C, by
enclosing any tokens after these keywords with comment delimiters. For
example,
#ifdef DEBUG
Debugging code
#endif DEBUG
would be transcribed as
#ifdef DEBUG
Debugging code
#endif /* DEBUG */
Page 2
UNIFDEF(1)UNIFDEF(1)
Unifdef writes to standard output by default. The -o option may be used
in lieu of shell redirection to specify an output file. More important,
the file specified by output may be identical to one of the input files,
or to standard input if there are no arguments. In this case, unifdef
will safely overwrite the input file.
The -z option causes unifdef to simplify or eliminate sections controlled
by #if constructs that test constant integer expressions. By default,
constructs such as
#if 0
Excluded text
#endif
are left intact.
AUTHOR
Brendan Eich, 03/16/89
SEE ALSOcc(1), cpp(1).
Page 3