Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ cpp(1) — DG/UX 4.00

Media Vault

Software Library

Restoration Projects

Artifacts Sought



                                                                   cpp(1)



        _________________________________________________________________
        cpp                                                       Command
        the C language preprocessor
        _________________________________________________________________


        SYNTAX

        /lib/cpp [ option ...  ] [ ifile [ ofile ] ]


        DESCRIPTION

        Cpp is the C language preprocessor.  Thus, the output of cpp is
        designed to be in a form acceptable as input to the next pass of
        the C compiler.  You should specify preprocessing by using the -E
        or -P option to cc(1), rather than by invoking /lib/cpp
        explicitly.

        Cpp optionally accepts two file names as arguments.  Ifile and
        ofile are respectively the input and output for the preprocessor.
        They default to standard input and standard output if not
        supplied.

        Options are:

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

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

        -Uname
             Remove any initial definition of name.  Name is a reserved
             symbol that is predefined by the particular preprocessor.

        -Dname
        -Dname=def
             Define name as if by a #define directive.  If no =def is
             given, name is defined as 1.  The -D option has lower
             precedence than the -U option.  That is, if the same name is
             used in both a -U option and a -D option, the name will be
             undefined regardless of the order of the options.

        -Idir
             Change the algorithm for searching for #include files whose
             names do not begin with / to look in dir before looking in
             the directories on the standard list.  Thus, #include files
             whose names are enclosed in "" will be searched for first in
             the directory of the file with the #include line, then in



        DG/UX 4.00                                                 Page 1
               Licensed material--property of copyright holder(s)





                                                                   cpp(1)



             directories named in -I options, and last in directories on
             a standard list.  For #include files whose names are
             enclosed in <>, the directory of the file with the #include
             line is not searched.

        -T   Forces cpp to use only the first eight characters for
             distinguishing different preprocessor names.  This behavior
             is the same as for previous preprocessors with respect to
             the length of names and is included for backward
             compatability.

        -Ydir
             Use directory dir in place of the standard list of
             directories when searching for #include files.

        -H   Print the path names of included files (one per line) on
             standard error.

        Two special names are understood by cpp.  The name LINE is
        defined as the current line number (as a decimal integer) as
        known by cpp, and FILE is defined as the current file name
        (as a C string) as known by cpp. You can use them anywhere
        (including in macros) just as any other defined name.

        All cpp directives start with #.  Any number of blanks and tabs
        are allowed between the # and the directive.  The directives are:

        #define name token-string
             Replace subsequent instances of name with token-string.

        #define name( arg, ..., arg ) token-string
             Replace subsequent instances of name followed by a (, a list
             of comma-separated set of tokens, and a ) by token-string,
             where each occurrence of an arg in token-string is replaced
             by the corresponding set of tokens in the list.  When a
             macro with arguments is expanded, the arguments are placed
             into the expanded token-string unchanged.  After the entire
             token-string has been expanded, cpp restarts its scan for
             names to expand at the beginning of the newly created
             token-string.

             Notice that there can be no space between name and the (.

        #undef name
             Forget the definition of name (if any).

        #identstring
             Put string into the .comment section of an object file.

        #include "filename"
        #include <filename>



        DG/UX 4.00                                                 Page 2
               Licensed material--property of copyright holder(s)





                                                                   cpp(1)



             Include at this point the contents of filename (which will
             then be run through cpp).  When you use the <filename>
             notation, filename is only searched for in the standard
             places.  See also the -I option above.

        #line integer-constant "filename"
             Makes cpp generate line control information for the next
             pass of the C compiler.  Integer-constant is the line number
             of the next line and filename is the file where it comes
             from.  If you omit filename, the current filename is
             unchanged.

        #endif
             Ends a section of lines begun by a test directive (#if,
             #ifdef, or #ifndef).  Each test directive must have a
             matching #endif.

        #ifdef name
             The lines following will appear in the output if name has
             been the subject of a previous #define without being the
             subject of an intervening #undef.

        #ifndef name
             The lines following will not appear in the output if name
             has been the subject of a previous #define without being the
             subject of an intervening #undef.

        #if constant-expression
             Lines following will appear in the output if the constant-
             expression evaluates to non-zero.  All binary non-assignment
             C operators, the ?: operator, the unary -, !, and ~
             operators are legal in constant-expression.  The precedence
             of the operators is the same as defined by the C language.

             An unary operator is also defined, which can be used in
             constant-expression in these two forms:  defined(name) or
             defined name.  This lets you use #ifdef and #ifndef in a #if
             directive.  In constant-expression, use only operators,
             integer constants, and names that cpp knows.  The sizeof
             operator is not available.

        #elif constant-expression
             Lines following will appear in the output if and only if the
             constant-expression evaluates to non-zero.  All binary non-
             assignment C operators, the ?: operator, the unary -,!, and
             ~ operators are all legal in constant-expression.  The
             precedence of the operators is the same as defined in the C
             language.  There is also a unary operator defined, which can
             be used in constant-expression in these two forms: defined (
             name ) or defined name.  This allows the utility of #ifdef
             and #ifndef in a #if directive.  Only these operators,



        DG/UX 4.00                                                 Page 3
               Licensed material--property of copyright holder(s)





                                                                   cpp(1)



             integer constants, and names, which are known by cpp, should
             be used in constant-expression.  In particular, the sizeof
             operator is not available.

             To test whether or not either of two symbols, bob and ted,
             are defined, use

                  #if defined(bob)|defined(ted)

        #else
             Reverses the notion of the test directive that matches this
             directive.  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 #else directives can be
        nested.


        FILES

        /usr/include   Standard directory for #include files


        SEE ALSO

        cc(1).


        DIAGNOSTICS

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


        NOTES

        When new-line characters were found in argument lists for macros
        to be expanded, previous versions of cpp put out the new-lines as
        they were found and expanded.  The current version of cpp
        replaces these new-lines with blanks.












        DG/UX 4.00                                                 Page 4
               Licensed material--property of copyright holder(s)



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026