cpp(1) DG/UX 4.30 cpp(1)
NAME
cpp - the C language preprocessor
SYNOPSIS
/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 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.
Licensed material--property of copyright holder(s) Page 1
cpp(1) DG/UX 4.30 cpp(1)
-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>
Include at this point the contents of filename (which
will then be run through cpp). When you use the
Licensed material--property of copyright holder(s) Page 2
cpp(1) DG/UX 4.30 cpp(1)
<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,
integer constants, and names, which are known by cpp,
Licensed material--property of copyright holder(s) Page 3
cpp(1) DG/UX 4.30 cpp(1)
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.
Licensed material--property of copyright holder(s) Page 4