@c Copyright (C) 1999-2017 Free Software Foundation, Inc.
@c This is part of the CPP and GCC manuals.
@c For copying conditions, see the file gcc.texi.

@c ---------------------------------------------------------------------
@c Options affecting the preprocessor
@c ---------------------------------------------------------------------

@c If this file is included with the flag ``cppmanual'' set, it is
@c formatted for inclusion in the CPP manual; otherwise the main GCC manual.

@item -D @var{name}
@opindex D
Predefine @var{name} as a macro, with definition @code{1}.

@item -D @var{name}=@var{definition}
The contents of @var{definition} are tokenized and processed as if
they appeared during translation phase three in a @samp{#define}
directive.  In particular, the definition is truncated by
embedded newline characters.

If you are invoking the preprocessor from a shell or shell-like
program you may need to use the shell's quoting syntax to protect
characters such as spaces that have a meaning in the shell syntax.

If you wish to define a function-like macro on the command line, write
its argument list with surrounding parentheses before the equals sign
(if any).  Parentheses are meaningful to most shells, so you should
quote the option.  With @command{sh} and @command{csh},
@option{-D'@var{name}(@var{args@dots{}})=@var{definition}'} works.

@option{-D} and @option{-U} options are processed in the order they
are given on the command line.  All @option{-imacros @var{file}} and
@option{-include @var{file}} options are processed after all
@option{-D} and @option{-U} options.

@item -U @var{name}
@opindex U
Cancel any previous definition of @var{name}, either built in or
provided with a @option{-D} option.

@item -include @var{file}
@opindex include
Process @var{file} as if @code{#include "file"} appeared as the first
line of the primary source file.  However, the first directory searched
for @var{file} is the preprocessor's working directory @emph{instead of}
the directory containing the main source file.  If not found there, it
is searched for in the remainder of the @code{#include "@dots{}"} search
chain as normal.

If multiple @option{-include} options are given, the files are included
in the order they appear on the command line.

@item -imacros @var{file}
@opindex imacros
Exactly like @option{-include}, except that any output produced by
scanning @var{file} is thrown away.  Macros it defines remain defined.
This allows you to acquire all the macros from a header without also
processing its declarations.

All files specified by @option{-imacros} are processed before all files
specified by @option{-include}.

@item -undef
@opindex undef
Do not predefine any system-specific or GCC-specific macros.  The
standard predefined macros remain defined.
@ifset cppmanual
@xref{Standard Predefined Macros}.
@end ifset

@item -pthread
@opindex pthread
Define additional macros required for using the POSIX threads library.
You should use this option consistently for both compilation and linking.
This option is supported on GNU/Linux targets, most other Unix derivatives,
and also on x86 Cygwin and MinGW targets.

@item -M
@opindex M
@cindex @command{make}
@cindex dependencies, @command{make}
Instead of outputting the result of preprocessing, output a rule
suitable for @command{make} describing the dependencies of the main
source file.  The preprocessor outputs one @command{make} rule containing
the object file name for that source file, a colon, and the names of all
the included files, including those coming from @option{-include} or
@option{-imacros} command-line options.

Unless specified explicitly (with @option{-MT} or @option{-MQ}), the
object file name consists of the name of the source file with any
suffix replaced with object file suffix and with any leading directory
parts removed.  If there are many included files then the rule is
split into several lines using @samp{\}-newline.  The rule has no
commands.

This option does not suppress the preprocessor's debug output, such as
@option{-dM}.  To avoid mixing such debug output with the dependency
rules you should explicitly specify the dependency output file with
@option{-MF}, or use an environment variable like
@env{DEPENDENCIES_OUTPUT} (@pxref{Environment Variables}).  Debug output
is still sent to the regular output stream as normal.

Passing @option{-M} to the driver implies @option{-E}, and suppresses
warnings with an implicit @option{-w}.

@item -MM
@opindex MM
Like @option{-M} but do not mention header files that are found in
system header directories, nor header files that are included,
directly or indirectly, from such a header.

This implies that the choice of angle brackets or double quotes in an
@samp{#include} directive does not in itself determine whether that
header appears in @option{-MM} dependency output.

@anchor{dashMF}
@item -MF @var{file}
@opindex MF
When used with @option{-M} or @option{-MM}, specifies a
file to write the dependencies to.  If no @option{-MF} switch is given
the preprocessor sends the rules to the same place it would send
preprocessed output.

When used with the driver options @option{-MD} or @option{-MMD},
@option{-MF} overrides the default dependency output file.

@item -MG
@opindex MG
In conjunction with an option such as @option{-M} requesting
dependency generation, @option{-MG} assumes missing header files are
generated files and adds them to the dependency list without raising
an error.  The dependency filename is taken directly from the
@code{#include} directive without prepending any path.  @option{-MG}
also suppresses preprocessed output, as a missing header file renders
this useless.

This feature is used in automatic updating of makefiles.

@item -MP
@opindex MP
This option instructs CPP to add a phony target for each dependency
other than the main file, causing each to depend on nothing.  These
dummy rules work around errors @command{make} gives if you remove header
files without updating the @file{Makefile} to match.

This is typical output:

@smallexample
test.o: test.c test.h

test.h:
@end smallexample

@item -MT @var{target}
@opindex MT

Change the target of the rule emitted by dependency generation.  By
default CPP takes the name of the main input file, deletes any
directory components and any file suffix such as @samp{.c}, and
appends the platform's usual object suffix.  The result is the target.

An @option{-MT} option sets the target to be exactly the string you
specify.  If you want multiple targets, you can specify them as a single
argument to @option{-MT}, or use multiple @option{-MT} options.

For example, @option{@w{-MT '$(objpfx)foo.o'}} might give

@smallexample
$(objpfx)foo.o: foo.c
@end smallexample

@item -MQ @var{target}
@opindex MQ

Same as @option{-MT}, but it quotes any characters which are special to
Make.  @option{@w{-MQ '$(objpfx)foo.o'}} gives

@smallexample
$$(objpfx)foo.o: foo.c
@end smallexample

The default target is automatically quoted, as if it were given with
@option{-MQ}.

@item -MD
@opindex MD
@option{-MD} is equivalent to @option{-M -MF @var{file}}, except that
@option{-E} is not implied.  The driver determines @var{file} based on
whether an @option{-o} option is given.  If it is, the driver uses its
argument but with a suffix of @file{.d}, otherwise it takes the name
of the input file, removes any directory components and suffix, and
applies a @file{.d} suffix.

If @option{-MD} is used in conjunction with @option{-E}, any
@option{-o} switch is understood to specify the dependency output file
(@pxref{dashMF,,-MF}), but if used without @option{-E}, each @option{-o}
is understood to specify a target object file.

Since @option{-E} is not implied, @option{-MD} can be used to generate
a dependency output file as a side-effect of the compilation process.

@item -MMD
@opindex MMD
Like @option{-MD} except mention only user header files, not system
header files.

@item -fpreprocessed
@opindex fpreprocessed
Indicate to the preprocessor that the input file has already been
preprocessed.  This suppresses things like macro expansion, trigraph
conversion, escaped newline splicing, and processing of most directives.
The preprocessor still recognizes and removes comments, so that you can
pass a file preprocessed with @option{-C} to the compiler without
problems.  In this mode the integrated preprocessor is little more than
a tokenizer for the front ends.

@option{-fpreprocessed} is implicit if the input file has one of the
extensions @samp{.i}, @samp{.ii} or @samp{.mi}.  These are the
extensions that GCC uses for preprocessed files created by
@option{-save-temps}.

@item -fdirectives-only
@opindex fdirectives-only
When preprocessing, handle directives, but do not expand macros.

The option's behavior depends on the @option{-E} and @option{-fpreprocessed}
options.

With @option{-E}, preprocessing is limited to the handling of directives
such as @code{#define}, @code{#ifdef}, and @code{#error}.  Other
preprocessor operations, such as macro expansion and trigraph
conversion are not performed.  In addition, the @option{-dD} option is
implicitly enabled.

With @option{-fpreprocessed}, predefinition of command line and most
builtin macros is disabled.  Macros such as @code{__LINE__}, which are
contextually dependent, are handled normally.  This enables compilation of
files previously preprocessed with @code{-E -fdirectives-only}.

With both @option{-E} and @option{-fpreprocessed}, the rules for
@option{-fpreprocessed} take precedence.  This enables full preprocessing of
files previously preprocessed with @code{-E -fdirectives-only}.

@item -fdollars-in-identifiers
@opindex fdollars-in-identifiers
@anchor{fdollars-in-identifiers}
Accept @samp{$} in identifiers.
@ifset cppmanual
@xref{Identifier characters}.
@end ifset

@item -fextended-identifiers
@opindex fextended-identifiers
Accept universal character names in identifiers.  This option is
enabled by default for C99 (and later C standard versions) and C++.

@item -fno-canonical-system-headers
@opindex fno-canonical-system-headers
When preprocessing, do not shorten system header paths with canonicalization.

@item -ftabstop=@var{width}
@opindex ftabstop
Set the distance between tab stops.  This helps the preprocessor report
correct column numbers in warnings or errors, even if tabs appear on the
line.  If the value is less than 1 or greater than 100, the option is
ignored.  The default is 8.

@item -ftrack-macro-expansion@r{[}=@var{level}@r{]}
@opindex ftrack-macro-expansion
Track locations of tokens across macro expansions. This allows the
compiler to emit diagnostic about the current macro expansion stack
when a compilation error occurs in a macro expansion. Using this
option makes the preprocessor and the compiler consume more
memory. The @var{level} parameter can be used to choose the level of
precision of token location tracking thus decreasing the memory
consumption if necessary. Value @samp{0} of @var{level} de-activates
this option. Value @samp{1} tracks tokens locations in a
degraded mode for the sake of minimal memory overhead. In this mode
all tokens resulting from the expansion of an argument of a
function-like macro have the same location. Value @samp{2} tracks
tokens locations completely. This value is the most memory hungry.
When this option is given no argument, the default parameter value is
@samp{2}.

Note that @code{-ftrack-macro-expansion=2} is activated by default.

@item -fexec-charset=@var{charset}
@opindex fexec-charset
@cindex character set, execution
Set the execution character set, used for string and character
constants.  The default is UTF-8.  @var{charset} can be any encoding
supported by the system's @code{iconv} library routine.

@item -fwide-exec-charset=@var{charset}
@opindex fwide-exec-charset
@cindex character set, wide execution
Set the wide execution character set, used for wide string and
character constants.  The default is UTF-32 or UTF-16, whichever
corresponds to the width of @code{wchar_t}.  As with
@option{-fexec-charset}, @var{charset} can be any encoding supported
by the system's @code{iconv} library routine; however, you will have
problems with encodings that do not fit exactly in @code{wchar_t}.

@item -finput-charset=@var{charset}
@opindex finput-charset
@cindex character set, input
Set the input character set, used for translation from the character
set of the input file to the source character set used by GCC@.  If the
locale does not specify, or GCC cannot get this information from the
locale, the default is UTF-8.  This can be overridden by either the locale
or this command-line option.  Currently the command-line option takes
precedence if there's a conflict.  @var{charset} can be any encoding
supported by the system's @code{iconv} library routine.

@ifclear cppmanual
@item -fpch-deps
@opindex fpch-deps
When using precompiled headers (@pxref{Precompiled Headers}), this flag
causes the dependency-output flags to also list the files from the
precompiled header's dependencies.  If not specified, only the
precompiled header are listed and not the files that were used to
create it, because those files are not consulted when a precompiled
header is used.

@item -fpch-preprocess
@opindex fpch-preprocess
This option allows use of a precompiled header (@pxref{Precompiled
Headers}) together with @option{-E}.  It inserts a special @code{#pragma},
@code{#pragma GCC pch_preprocess "@var{filename}"} in the output to mark
the place where the precompiled header was found, and its @var{filename}.
When @option{-fpreprocessed} is in use, GCC recognizes this @code{#pragma}
and loads the PCH@.

This option is off by default, because the resulting preprocessed output
is only really suitable as input to GCC@.  It is switched on by
@option{-save-temps}.

You should not write this @code{#pragma} in your own code, but it is
safe to edit the filename if the PCH file is available in a different
location.  The filename may be absolute or it may be relative to GCC's
current directory.
@end ifclear

@item -fworking-directory
@opindex fworking-directory
@opindex fno-working-directory
Enable generation of linemarkers in the preprocessor output that
let the compiler know the current working directory at the time of
preprocessing.  When this option is enabled, the preprocessor
emits, after the initial linemarker, a second linemarker with the
current working directory followed by two slashes.  GCC uses this
directory, when it's present in the preprocessed input, as the
directory emitted as the current working directory in some debugging
information formats.  This option is implicitly enabled if debugging
information is enabled, but this can be inhibited with the negated
form @option{-fno-working-directory}.  If the @option{-P} flag is
present in the command line, this option has no effect, since no
@code{#line} directives are emitted whatsoever.

@item -A @var{predicate}=@var{answer}
@opindex A
Make an assertion with the predicate @var{predicate} and answer
@var{answer}.  This form is preferred to the older form @option{-A
@var{predicate}(@var{answer})}, which is still supported, because
it does not use shell special characters.
@ifset cppmanual
@xref{Obsolete Features}.
@end ifset

@item -A -@var{predicate}=@var{answer}
Cancel an assertion with the predicate @var{predicate} and answer
@var{answer}.

@item -C
@opindex C
Do not discard comments.  All comments are passed through to the output
file, except for comments in processed directives, which are deleted
along with the directive.

You should be prepared for side effects when using @option{-C}; it
causes the preprocessor to treat comments as tokens in their own right.
For example, comments appearing at the start of what would be a
directive line have the effect of turning that line into an ordinary
source line, since the first token on the line is no longer a @samp{#}.

@item -CC
@opindex CC
Do not discard comments, including during macro expansion.  This is
like @option{-C}, except that comments contained within macros are
also passed through to the output file where the macro is expanded.

In addition to the side-effects of the @option{-C} option, the
@option{-CC} option causes all C++-style comments inside a macro
to be converted to C-style comments.  This is to prevent later use
of that macro from inadvertently commenting out the remainder of
the source line.

The @option{-CC} option is generally used to support lint comments.

@item -P
@opindex P
Inhibit generation of linemarkers in the output from the preprocessor.
This might be useful when running the preprocessor on something that is
not C code, and will be sent to a program which might be confused by the
linemarkers.
@ifset cppmanual
@xref{Preprocessor Output}.
@end ifset

@cindex traditional C language
@cindex C language, traditional
@item -traditional
@itemx -traditional-cpp
@opindex traditional-cpp
@opindex traditional

Try to imitate the behavior of pre-standard C preprocessors, as
opposed to ISO C preprocessors.
@ifset cppmanual
@xref{Traditional Mode}.
@end ifset
@ifclear cppmanual
See the GNU CPP manual for details.
@end ifclear

Note that GCC does not otherwise attempt to emulate a pre-standard 
C compiler, and these options are only supported with the @option{-E} 
switch, or when invoking CPP explicitly.

@item -trigraphs
@opindex trigraphs
Support ISO C trigraphs.
These are three-character sequences, all starting with @samp{??}, that
are defined by ISO C to stand for single characters.  For example,
@samp{??/} stands for @samp{\}, so @samp{'??/n'} is a character
constant for a newline.
@ifset cppmanual
@xref{Initial processing}.
@end ifset

@ifclear cppmanual
The nine trigraphs and their replacements are

@smallexample
Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
Replacement:      [    ]    @{    @}    #    \    ^    |    ~
@end smallexample
@end ifclear

By default, GCC ignores trigraphs, but in
standard-conforming modes it converts them.  See the @option{-std} and
@option{-ansi} options.

@item -remap
@opindex remap
Enable special code to work around file systems which only permit very
short file names, such as MS-DOS@.

@item -H
@opindex H
Print the name of each header file used, in addition to other normal
activities.  Each name is indented to show how deep in the
@samp{#include} stack it is.  Precompiled header files are also
printed, even if they are found to be invalid; an invalid precompiled
header file is printed with @samp{...x} and a valid one with @samp{...!} .

@item -d@var{letters}
@opindex d
Says to make debugging dumps during compilation as specified by
@var{letters}.  The flags documented here are those relevant to the
preprocessor.  Other @var{letters} are interpreted
by the compiler proper, or reserved for future versions of GCC, and so
are silently ignored.  If you specify @var{letters} whose behavior
conflicts, the result is undefined.
@ifclear cppmanual
@xref{Developer Options}, for more information.
@end ifclear

@table @gcctabopt
@item -dM
@opindex dM
Instead of the normal output, generate a list of @samp{#define}
directives for all the macros defined during the execution of the
preprocessor, including predefined macros.  This gives you a way of
finding out what is predefined in your version of the preprocessor.
Assuming you have no file @file{foo.h}, the command

@smallexample
touch foo.h; cpp -dM foo.h
@end smallexample

@noindent
shows all the predefined macros.

@ifclear cppmanual
If you use @option{-dM} without the @option{-E} option, @option{-dM} is
interpreted as a synonym for @option{-fdump-rtl-mach}.
@xref{Developer Options, , ,gcc}.
@end ifclear

@item -dD
@opindex dD
Like @option{-dM} except in two respects: it does @emph{not} include the
predefined macros, and it outputs @emph{both} the @samp{#define}
directives and the result of preprocessing.  Both kinds of output go to
the standard output file.

@item -dN
@opindex dN
Like @option{-dD}, but emit only the macro names, not their expansions.

@item -dI
@opindex dI
Output @samp{#include} directives in addition to the result of
preprocessing.

@item -dU
@opindex dU
Like @option{-dD} except that only macros that are expanded, or whose
definedness is tested in preprocessor directives, are output; the
output is delayed until the use or test of the macro; and
@samp{#undef} directives are also output for macros tested but
undefined at the time.
@end table

@item -fdebug-cpp
@opindex fdebug-cpp
This option is only useful for debugging GCC.  When used from CPP or with
@option{-E}, it dumps debugging information about location maps.  Every
token in the output is preceded by the dump of the map its location
belongs to.

When used from GCC without @option{-E}, this option has no effect.

