unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (OSF1-V5.1-alpha)
Page:
Section:
Apropos / Subsearch:
optional field



unifdef(1)							   unifdef(1)



NAME

  unifdef - Removes #ifdefed lines

SYNOPSIS

  unifdef [-tlc] [-Dsymbol] [-idsymbol]	[-iusymbol] [file] [-Usymbol]

  The unifdef command partially	simulates the behavior of the C	preprocessor
  in processing	#ifdef conditionals.

OPTIONS

  -c  Complements the action of	unifdef; retains lines that would normally be
      removed and removes lines	that would normally be retained.

  -Dsymbol
      Specifies	symbol as a defined #ifdef symbol.

  -idsymbol
      Specifies	defined	lines inside certain #ifdefs to	be ignored but copied
      out.

  -iusymbol
      Specifies	undefined lines	inside certain #ifdefs to be ignored and not
      copied out.

  -l  Replaces removed lines with blank	lines instead of deleting them.

  -t  Processes	plain text (rather than	C code)	input. The unifdef command
      does not try to recognize	comments, single quotes, and double quotes.

  -Usymbol
      Specifies	symbol as an undefined #ifdef symbol.

DESCRIPTION

  The unifdef command recognizes nested	#ifdefs, comments, single and double
  quotes of C syntax so	that it	can function correctly,	but does not include
  files	or interpret macros. The unifdef command recognizes, but does not
  remove comments.

  The unifdef command takes its	input from stdin if no file argument is
  given, and copies its	output to stdout.

  You specify the symbols you want defined with	-Dsymbol or undefined with
  -Usymbol and the lines inside	those #ifdefs are copied to the	output or
  removed, as appropriate. The #ifdef, #ifndef,	#else, #elif, and endif	lines
  associated with symbol are also removed. The #ifdefs involving unspecified
  symbols are untouched	and copied out along with their	associated #ifdef,
  #else, elif, and #endif lines.  If the same symbol appears in	more than one
  argument, only the first occurrence is significant.  For instance, if	an
  #ifdef X occurs nested inside	another	#ifdef X, the inside #ifdef is
  considered an	unrecognized symbol.

  If you use #ifdefs to	delimit	non-C lines, such as comments or unfinished
  code,	it is necessary	to specify which symbols are to	be used	for that pur-
  pose.	 Otherwise, the	unifdef	command	tries to parse for quotes and com-
  ments	in those #ifdef	lines.

  Keywords


  The following	keywords can be	used with the unifdef command:

       ifdef
       ifndef
       else
       endif
       elif

  The unifdef command uses the elif keyword as follows.	(Note that "Under-
  stood" means unifdef knows how to convert elif to if.)

  # elif defined (X)
      Understood

  # elif X
      Not understood

  # elif defined (X)  defined (Y)
      Not understood

  For example:

       # ifdef X
       x
       # elif defined (Y)
       y
       # elif defined (A)  || defined (B)
       a
       # else
       default
       # endif

  The following	list shows the results of using	the elif keyword with vari-
  ables:

       -DX
       x

       -UX
       # if defined (Y)
       y
       # elif defined (A)  || defined (B)
       a
       # else
       default
       # endif
       -UX -DY
       y

       -UY -UX
       # if defined (Y)
       y
       # elif defined (A)  || defined (B)
       a
       # else
       default
       # endif

       -UY -UX -DA
       # if defined (Y)
       y
       # elif defined (A)  || defined (B)
       a
       # else
       default
       # endif

NOTES

  The unifdef command cannot process cpp constructs such as:

       #if defined(X) || defined(Y)

DIAGNOSTICS

  The unifdef command can fail for several reasons: a premature	end of file,
  or an	inappropriate else, elif, or endif.

EXIT STATUS

  Exit status is 0 if output is	an exact copy of input,	1 if not, 2 if the
  unifdef command fails.

EXAMPLES

   1.  The following command line causes the unifdef command to	read the file
       original.c and remove the #ifdef	A lines.  It then removes everything
       following an #elif/#else	associated with	the #ifdef A down to the
       #endif:
	    unifdef -DA	original.c >> modified.c

   2.  The following command line causes the unifdef command to	read the file
       original.c, and remove the #ifdef A down	to either its associated
       #elif/#else, or its associated #endif:
	    unifdef -UA	original.c >> modified.c

       In the case of the #elif, the #elif is replaced with #if. In the	case
       of #else, the #else is deleted along with its associated	#endif.

SEE ALSO

  Commands:  diff(1)