


      CCCCPPPPPPPP((((1111))))                      ((((UUUUNNNNIIIIXXXX 5555....0000))))                     CCCCPPPPPPPP((((1111))))



      NNNNAAAAMMMMEEEE
           cpp - the C language preprocessor

      SSSSYYYYNNNNTTTTAAAAXXXX
           ////lllliiiibbbb////ccccpppppppp [[[[ option ...  ]]]] [[[[ ifile [[[[ ofile ]]]] ]]]]

      DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
           _C_p_p is the C language preprocessor which is invoked as the
           first pass of any C compilation using the _c_c(1) command.
           Thus the output of _c_p_p is designed to be in a form
           acceptable as input to the next pass of the C compiler.  As
           the C language evolves, _c_p_p and the rest of the C
           compilation package will be modified to follow these
           changes.  Therefore, the use of _c_p_p other than in this
           framework is not suggested.  The preferred way to invoke _c_p_p
           is through the _c_c(1) command since the functionality of _c_p_p
           may someday be moved elsewhere.  See _m_4(1) for a general
           macro processor.

           _C_p_p optionally accepts two file names as arguments.  _I_f_i_l_e
           and _o_f_i_l_e are respectively the input and output for the
           preprocessor.  They default to standard input and standard
           output if not supplied.

           The following _o_p_t_i_o_n_s to _c_p_p are recognized:

           ----PPPP   Preprocess the input without producing the line control
                information used by the next pass of the C compiler.

           ----CCCC   By default, _c_p_p strips C-style comments.  If the ----CCCC
                option is specified, all comments (except those found
                on _c_p_p directive lines) are passed along.

           ----UUUU_n_a_m_e
                Remove any initial definition of _n_a_m_e, where _n_a_m_e is a
                reserved symbol that is predefined by the particular
                preprocessor.  The current list of these reserved
                symbols includes:
                     operating system:    unix
                     hardware:            ridge

           ----DDDD_n_a_m_e
           ----DDDD_n_a_m_e=_d_e_f
                Define _n_a_m_e as if by a ####ddddeeeeffffiiiinnnneeee directive.  If no =_d_e_f
                is given, _n_a_m_e is defined as 1.

           ----IIII_d_i_r
                Change the algorithm for searching for ####iiiinnnncccclllluuuuddddeeee files
                whose names do not begin with //// to look in _d_i_r before
                looking in the directories on the standard list.  Thus,
                ####iiiinnnncccclllluuuuddddeeee files whose names are enclosed in """""""" will be
                searched for first in the directory of the _i_f_i_l_e



      Page 1                                                   (9010-E)






      CCCCPPPPPPPP((((1111))))                      ((((UUUUNNNNIIIIXXXX 5555....0000))))                     CCCCPPPPPPPP((((1111))))



                argument, then in directories named in ----IIII options, and
                last in directories on a standard list.  For ####iiiinnnncccclllluuuuddddeeee
                files whose names are enclosed in <<<<>>>>, the directory of
                the _i_f_i_l_e argument is not searched.

           Two special names are understood by _c_p_p.  The name ________LLLLIIIINNNNEEEE________
           is defined as the current line number (as a decimal integer)
           as known by _c_p_p, and ________FFFFIIIILLLLEEEE________ is defined as the current file
           name (as a C string) as known by _c_p_p. They can be used
           anywhere (including in macros) just as any other defined
           name.

           All _c_p_p directives start with lines begun by ####.  The
           directives are:

           ####ddddeeeeffffiiiinnnneeee _n_a_m_e _t_o_k_e_n-_s_t_r_i_n_g
                Replace subsequent instances of _n_a_m_e with _t_o_k_e_n-_s_t_r_i_n_g.

           ####ddddeeeeffffiiiinnnneeee _n_a_m_e(((( _a_r_g,,,, ............,,,, _a_r_g )))) _t_o_k_e_n-_s_t_r_i_n_g
                Notice that there can be no space between _n_a_m_e and the
                ((((.  Replace subsequent instances of _n_a_m_e followed by a
                ((((, a list of comma separated tokens, and a )))) by _t_o_k_e_n-
                _s_t_r_i_n_g where each occurrence of an _a_r_g in the _t_o_k_e_n-
                _s_t_r_i_n_g is replaced by the corresponding token in the
                comma separated list.

           ####uuuunnnnddddeeeeffff _n_a_m_e
                Cause the definition of _n_a_m_e (if any) to be forgotten
                from now on.

           ####iiiinnnncccclllluuuuddddeeee "_f_i_l_e_n_a_m_e"
           ####iiiinnnncccclllluuuuddddeeee <<<<_f_i_l_e_n_a_m_e>>>>
                Include at this point the contents of _f_i_l_e_n_a_m_e (which
                will then be run through _c_p_p).  When the <<<<_f_i_l_e_n_a_m_e>>>>
                notation is used, _f_i_l_e_n_a_m_e is only searched for in the
                standard places.  See the ----IIII option above for more
                detail.

           ####lllliiiinnnneeee _i_n_t_e_g_e_r-_c_o_n_s_t_a_n_t "_f_i_l_e_n_a_m_e"
                Causes _c_p_p to generate line control information for the
                next pass of the C compiler.  _I_n_t_e_g_e_r-_c_o_n_s_t_a_n_t is the
                line number of the next line and _f_i_l_e_n_a_m_e is the file
                where it comes from.  If "_f_i_l_e_n_a_m_e" is not given, the
                current file name is unchanged.

           ####eeeennnnddddiiiiffff
                Ends a section of lines begun by a test directive (####iiiiffff,
                ####iiiiffffddddeeeeffff, or ####iiiiffffnnnnddddeeeeffff).  Each test directive must have a
                matching ####eeeennnnddddiiiiffff.

           ####iiiiffffddddeeeeffff _n_a_m_e
                The lines following will appear in the output if and



      Page 2                                                   (9010-E)






      CCCCPPPPPPPP((((1111))))                      ((((UUUUNNNNIIIIXXXX 5555....0000))))                     CCCCPPPPPPPP((((1111))))



                only if _n_a_m_e has been the subject of a previous ####ddddeeeeffffiiiinnnneeee
                without being the subject of an intervening ####uuuunnnnddddeeeeffff.

           ####iiiiffffnnnnddddeeeeffff _n_a_m_e
                The lines following will not appear in the output if
                and only if _n_a_m_e has been the subject of a previous
                ####ddddeeeeffffiiiinnnneeee without being the subject of an intervening
                ####uuuunnnnddddeeeeffff.

           ####iiiiffff _c_o_n_s_t_a_n_t-_e_x_p_r_e_s_s_i_o_n
                Lines following will appear in the output if and only
                if the _c_o_n_s_t_a_n_t-_e_x_p_r_e_s_s_i_o_n evaluates to non-zero.  All
                binary non-assignment C operators, the ????:::: operator, the
                unary ----, !!!!, and ~~~~ operators are all legal in _c_o_n_s_t_a_n_t-
                _e_x_p_r_e_s_s_i_o_n.  The precedence of the operators is the
                same as defined by the C language.  There is also a
                unary operator ddddeeeeffffiiiinnnneeeedddd, which can be used in _c_o_n_s_t_a_n_t-
                _e_x_p_r_e_s_s_i_o_n in these two forms:  ddddeeeeffffiiiinnnneeeedddd (((( _n_a_m_e )))) or
                ddddeeeeffffiiiinnnneeeedddd _n_a_m_e....  This allows the utility of ####iiiiffffddddeeeeffff and
                ####iiiiffffnnnnddddeeeeffff in a ####iiiiffff directive.  Only these operators,
                integer constants, and names which are known by _c_p_p
                should be used in _c_o_n_s_t_a_n_t-_e_x_p_r_e_s_s_i_o_n.  In particular,
                the ssssiiiizzzzeeeeooooffff operator is not available.

           ####eeeellllsssseeee
                Reverses the notion of the test directive which matches
                this directive.  So if lines previous to this directive
                are ignored, the following lines will appear in the
                output.  And vice versa.

           The test directives and the possible ####eeeellllsssseeee directives can be
           nested.

      FFFFIIIILLLLEEEESSSS
           /usr/include   standard directory for ####iiiinnnncccclllluuuuddddeeee files

      SSSSEEEEEEEE AAAALLLLSSSSOOOO
           cc(1), m4(1).

      DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
           The error messages produced by _c_p_p are intended to be self-
           explanatory.  The line number and filename where the error
           occurred are printed along with the diagnostic.

      NNNNOOOOTTTTEEEESSSS
           When newline characters were found in argument lists for
           macros to be expanded, previous versions of _c_p_p put out the
           newlines as they were found and expanded.  The current
           version of _c_p_p replaces these newlines with blanks to
           alleviate problems that the previous versions had when this
           occurred.




      Page 3                                                   (9010-E)






      CCCCPPPPPPPP((((1111))))                      ((((UUUUNNNNIIIIXXXX 5555....0000))))                     CCCCPPPPPPPP((((1111))))























































      Page 4                                                   (9010-E)






