GNU C language preprocessor. cpp is normally invoked as the first pass of any C compilation by the gcc command. The output of cpp is a form acceptable as input to the next pass of the C compiler. The ifile and ofile options are, respectively, the input and output for the preprocessor; they default to standard input and standard output.
Do not allow $ in identifiers.
Use 1990 ISO C standard. This is equivalent to -std=c89.
Similar to -dM, but exclude predefined macros and include results of preprocessing.
Suppress normal output. Print series of #defines that create the macros used in the source file.
Similar to -dD, but don't print macro expansions.
Print #include directives in addition to other output.
Treat file as already preprocessed. Skip most processing directives, remove all comments, and tokenize file.
Set distance between tabstops so columns will be reported correctly in warnings and errors. Default is 8.
Search dir for header files when a header file is not found in any of the included directories.
Process macros in file before processing main files.
Process file before main file.
When adding directories with -iwithprefix, prepend prefix to the directory's name.
Search dir for header files after searching directories specified with -I but before searching standard system directories.
Append dir to the list of directories to be searched when a header file cannot be found in the main include path. If -iprefix has been set, prepend that prefix to the directory's name.
Insert dir at the beginning of the list of directories to be searched when a header file cannot be found in the main include path. If -iprefix has been set, prepend that prefix to the directory's name.
-lang-c, -lang-c++, -lang-objc, -lang-objc++
Expect the source to be in C, C++, Objective C, or Objective C++, respectively.
Display all lint commands in comments as #pragma lintcommand.
Search only specified, not standard, directories for header files.
Suppress searching of directories believed to contain C++-specific header files.
Write output to file. (Same as specifying a second filename in the command line.)
Produce a fatal error in every case in which -pedantic would have produced a warning.
Specify C standard of input file. Accepted values are:
1990 ISO C standard.
1994 amendment to the 1990 ISO C standard.
iso9899:1999, c99, iso9899:199x, c9x
1999 revised ISO C standard.
1990 C Standard with gnu extensions. The default value.
1999 revised ISO C standard with gnu extensions.
Behave like traditional C, not ANSI.
Convert special three-letter sequences, meant to represent missing characters on some terminals, into the single character they represent.
Suppress definition of all nonstandard macros.
Print version number, then process file.
Print version number, then exit.
Don't print warnings.
Specify the language of the input file. language may be c, c++, objective-c, or assembler-with-cpp. By default, language is deduced from the filename extension. If the extension is unrecognized, the default is c.
Assert name with value def as if defined by #assert. To turn off standard assertions, use -A-.
Cancel assertion name with value def.
Retain all comments except those found on cpp directive lines. By default, cpp strips C-style comments.
Define name with value def as if by a #define. If no =def is given, name is defined with value 1. -D has lower precedence than -U.
Preprocess the source files, but do not compile. Print result to standard output. This option is usually passed from gcc.
Print pathnames of included files, one per line, on standard error.
Search in directory dir for #include files whose names do not begin with / before looking in directories on standard list. #include files whose names are enclosed in double quotes and do not begin with / will be searched for first in the current directory, then in directories named on -I options, and last in directories on the standard list.
Split includes. Search directories specified by -I options preceding this one for header files included with quotes (#include "file.h") but not for header files included with angle brackets (#include <file.h>). Search directories specified by -I options following this one for all header files.
Suppress normal output. Print a rule for make that describes the main source file's dependencies. If -MG is specified, assume that missing header files are actually generated files, and look for them in the source file's directory.
Print rules generated by -M or -MM to file.
Similar to -M, but output to file; also compile the source.
Similar to -M, but describe only those files included as a result of #include"file".
Similar to -MD, but describe only the user's header files.
Similar to -MT, but quote any characters that are special to make.
Specify the target to use when generating a rule for make. By default, the target is based on the name of the main input file.
Preprocess input without producing line-control information used by next pass of the C compiler.
Remove any initial definition of name, where name is a reserved symbol predefined by the preprocessor, or a name defined on a -D option. Names predefined by cpp are unix and i386 (for Intel systems).
Warn both on nested comments and trigraphs.
Warn when encountering the beginning of a nested comment.
Warn when encountering constructs that are interpreted differently in ANSI than in traditional C.
Warn when encountering trigraphs, which are three-letter sequences meant to represent missing characters on some terminals.
cpp understands various special names, some of which are:
_ _DATE_ _
Current date (e.g., Jan 10 2003).
_ _FILE_ _
Current filename (as a C string).
_ _LINE_ _
Current source line number (as a decimal integer).
_ _TIME_ _
Current time (e.g., 12:00:00).
These special names can be used anywhere, including in macros, just like any other defined names. cpp's understanding of the line number and filename may be changed using a #line directive.
All cpp directive lines start with # in column 1. Any number of blanks and tabs is allowed between the # and the directive. The directives are:
Define a question called name, with an answer of string. Assertions can be tested with #if directives. The predefined assertions for #system, #cpu, and #machine can be used for architecture-dependent changes.
Remove assertion for question name.
Define a macro called name, with a value of token-string. Subsequent instances of name are replaced with token-string.
#definename( arg, ... , arg ) token-string
This allows substitution of a macro with arguments. token-string will be substituted for name in the input file. Each call to name in the source file includes arguments that are plugged into the corresponding args in token-string.
Remove definition of the macro name. No additional tokens are permitted on the directive line after name.
Put string into the comment section of an object file.
Include contents of filename at this point in the program. No additional tokens are permitted on the directive line after the final " or >.
Cause cpp to generate line-control information for the next pass of the C compiler. The compiler behaves as if integer-constant is the line number of the next line of source code and filename (if present) is the name of the input file. No additional tokens are permitted on the directive line after the optional filename.
End a section of lines begun by a test directive (#if, #ifdef, or #ifndef). No additional tokens are permitted on the directive line.
Lines following this directive and up to matching #endif or next #else or #elif will appear in the output if name is currently defined. No additional tokens are permitted on the directive line after name.
Lines following this directive and up to matching #endif or next #else or #elif will appear in the output if name is not currently defined. No additional tokens are permitted on the directive line after name.
Lines following this directive and up to matching #endif or next #else or #elif will appear in the output if constant-expression evaluates to nonzero.
An arbitrary number of #elif directives are allowed between an #if, #ifdef, or #ifndef directive and an #else or #endif directive. The lines following the #elif and up to the next #else, #elif, or #endif directive will appear in the output if the preceding test directive and all intervening #elif directives evaluate to zero, and the constant-expression evaluates to nonzero. If constant-expression evaluates to nonzero, all succeeding #elif and #else directives will be ignored.
Lines following this directive and up to the matching #endif will appear in the output if the preceding test directive evaluates to zero, and all intervening #elif directives evaluate to zero. No additional tokens are permitted on the directive line.