@c Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
@c 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.

@table @gcctabopt
@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 will be 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 will need
to 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 -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 -I @var{dir}
@opindex I
Add the directory @var{dir} to the list of directories to be searched
for header files.
@ifset cppmanual
@xref{Search Path}.
@end ifset
Directories named by @option{-I} are searched before the standard
system include directories.  If the directory @var{dir} is a standard
system include directory, the option is ignored to ensure that the
default search order for system directories and the special treatment
of system headers are not defeated
@ifset cppmanual
(@pxref{System Headers})
@end ifset
.

@item -o @var{file}
@opindex o
Write output to @var{file}.  This is the same as specifying @var{file}
as the second non-option argument to @command{cpp}.  @command{gcc} has a
different interpretation of a second non-option argument, so you must
use @option{-o} to specify the output file.

@item -Wall
@opindex Wall
Turns on all optional warnings which are desirable for normal code.
At present this is @option{-Wcomment}, @option{-Wtrigraphs},
@option{-Wmultichar} and a warning about integer promotion causing a
change of sign in @code{#if} expressions.  Note that many of the
preprocessor's warnings are on by default and have no options to
control them.

@item -Wcomment
@itemx -Wcomments
@opindex Wcomment
@opindex Wcomments
Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
comment, or whenever a backslash-newline appears in a @samp{//} comment.
(Both forms have the same effect.)

@item -Wtrigraphs
@opindex Wtrigraphs
@anchor{Wtrigraphs}
Most trigraphs in comments cannot affect the meaning of the program.
However, a trigraph that would form an escaped newline (@samp{??/} at
the end of a line) can, by changing where the comment begins or ends.
Therefore, only trigraphs that would form escaped newlines produce
warnings inside a comment.

This option is implied by @option{-Wall}.  If @option{-Wall} is not
given, this option is still enabled unless trigraphs are enabled.  To
get trigraph conversion without warnings, but get the other
@option{-Wall} warnings, use @samp{-trigraphs -Wall -Wno-trigraphs}.

@item -Wtraditional
@opindex Wtraditional
Warn about certain constructs that behave differently in traditional and
ISO C@.  Also warn about ISO C constructs that have no traditional C
equivalent, and problematic constructs which should be avoided.
@ifset cppmanual
@xref{Traditional Mode}.
@end ifset

@item -Wimport
@opindex Wimport
Warn the first time @samp{#import} is used.

@item -Wundef
@opindex Wundef
Warn whenever an identifier which is not a macro is encountered in an
@samp{#if} directive, outside of @samp{defined}.  Such identifiers are
replaced with zero.

@item -Wunused-macros
@opindex Wunused-macros
Warn about macros defined in the main file that are unused.  A macro
is @dfn{used} if it is expanded or tested for existence at least once.
The preprocessor will also warn if the macro has not been used at the
time it is redefined or undefined.

Built-in macros, macros defined on the command line, and macros
defined in include files are not warned about.

@emph{Note:} If a macro is actually used, but only used in skipped
conditional blocks, then CPP will report it as unused.  To avoid the
warning in such a case, you might improve the scope of the macro's
definition by, for example, moving it into the first skipped block.
Alternatively, you could provide a dummy use with something like:

@smallexample
#if defined the_macro_causing_the_warning
#endif
@end smallexample

@item -Wendif-labels
@opindex Wendif-labels
Warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
This usually happens in code of the form

@smallexample
#if FOO
@dots{}
#else FOO
@dots{}
#endif FOO
@end smallexample

@noindent
The second and third @code{FOO} should be in comments, but often are not
in older programs.  This warning is on by default.

@item -Werror
@opindex Werror
Make all warnings into hard errors.  Source code which triggers warnings
will be rejected.

@item -Wsystem-headers
@opindex Wsystem-headers
Issue warnings for code in system headers.  These are normally unhelpful
in finding bugs in your own code, therefore suppressed.  If you are
responsible for the system library, you may want to see them.

@item -w
@opindex w
Suppress all warnings, including those which GNU CPP issues by default.

@item -pedantic
@opindex pedantic
Issue all the mandatory diagnostics listed in the C standard.  Some of
them are left out by default, since they trigger frequently on harmless
code.

@item -pedantic-errors
@opindex pedantic-errors
Issue all the mandatory diagnostics, and make all mandatory diagnostics
into errors.  This includes mandatory diagnostics that GCC issues
without @samp{-pedantic} but treats as warnings.

@item -M
@opindex M
@cindex make
@cindex dependencies, 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 basename of the source file with any
suffix replaced with object file suffix.  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
will still be 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 will appear in @option{-MM} dependency output.  This is a
slight change in semantics from GCC versions 3.0 and earlier.

@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 have sent
preprocessed output.

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

@c APPLE LOCAL begin -dependency-file
@item -dependency-file
@opindex dependency-file @var{name}
Like @option{-MF}. (APPLE ONLY)
@c APPLE LOCAL end -dependency-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, including any path,
deletes any file suffix such as @samp{.c}, and appends the platform's
usual object suffix.  The result is the target.

An @option{-MT} option will set 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 take the
basename of the input file 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.

@ifclear cppmanual
@item -fpch-deps
@opindex fpch-deps
When using precompiled headers (@pxref{Precompiled Headers}), this flag
will cause the dependency-output flags to also list the files from the
precompiled header's dependencies.  If not specified only the
precompiled header would be 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 "<filename>"} in the output to mark
the place where the precompiled header was found, and its 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 -x c
@itemx -x c++
@itemx -x objective-c
@c APPLE LOCAL Objective-C++
@itemx -x objective-c++
@itemx -x assembler-with-cpp
@opindex x
@c APPLE LOCAL Objective-C++
Specify the source language: C, C++, Objective-C, Objective-C++, or assembly.  This has
nothing to do with standards conformance or extensions; it merely
selects which base syntax to expect.  If you give none of these options,
cpp will deduce the language from the extension of the source file:
@c APPLE LOCAL Objective-C++
@samp{.c}, @samp{.cc}, @samp{.m}, @samp{.mm}, or @samp{.S}.  Some other common
extensions for C++ and assembly are also recognized.  If cpp does not
recognize the extension, it will treat the file as C; this is the most
generic mode.

@emph{Note:} Previous versions of cpp accepted a @option{-lang} option
which selected both the language and the standards conformance level.
This option has been removed, because it conflicts with the @option{-l}
option.

@item -std=@var{standard}
@itemx -ansi
@opindex ansi
@opindex std=
Specify the standard to which the code should conform.  Currently CPP
knows about C and C++ standards; others may be added in the future.

@var{standard}
may be one of:
@table @code
@item iso9899:1990
@itemx c89
The ISO C standard from 1990.  @samp{c89} is the customary shorthand for
this version of the standard.

The @option{-ansi} option is equivalent to @option{-std=c89}.

@item iso9899:199409
The 1990 C standard, as amended in 1994.

@item iso9899:1999
@itemx c99
@itemx iso9899:199x
@itemx c9x
The revised ISO C standard, published in December 1999.  Before
publication, this was known as C9X@.

@item gnu89
The 1990 C standard plus GNU extensions.  This is the default.

@item gnu99
@itemx gnu9x
The 1999 C standard plus GNU extensions.

@item c++98
The 1998 ISO C++ standard plus amendments.

@item gnu++98
The same as @option{-std=c++98} plus GNU extensions.  This is the
default for C++ code.
@end table

@item -I-
@opindex I-
Split the include path.  Any directories specified with @option{-I}
options before @option{-I-} are searched only for headers requested with
@code{@w{#include "@var{file}"}}; they are not searched for
@code{@w{#include <@var{file}>}}.  If additional directories are
specified with @option{-I} options after the @option{-I-}, those
directories are searched for all @samp{#include} directives.

In addition, @option{-I-} inhibits the use of the directory of the current
file directory as the first search directory for @code{@w{#include
"@var{file}"}}.
@ifset cppmanual
@xref{Search Path}.
@end ifset
This option has been deprecated.

@item -nostdinc
@opindex nostdinc
Do not search the standard system directories for header files.
Only the directories you have specified with @option{-I} options
(and the directory of the current file, if appropriate) are searched.

@item -nostdinc++
@opindex nostdinc++
Do not search for header files in the C++-specific standard directories,
but do still search the other standard directories.  (This option is
used when building the C++ library.)

@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 -idirafter @var{dir}
@opindex idirafter
Search @var{dir} for header files, but do it @emph{after} all
directories specified with @option{-I} and the standard system directories
have been exhausted.  @var{dir} is treated as a system include directory.

@item -iprefix @var{prefix}
@opindex iprefix
Specify @var{prefix} as the prefix for subsequent @option{-iwithprefix}
options.  If the prefix represents a directory, you should include the
final @samp{/}.

@item -iwithprefix @var{dir}
@itemx -iwithprefixbefore @var{dir}
@opindex iwithprefix
@opindex iwithprefixbefore
Append @var{dir} to the prefix specified previously with
@option{-iprefix}, and add the resulting directory to the include search
path.  @option{-iwithprefixbefore} puts it in the same place @option{-I}
would; @option{-iwithprefix} puts it where @option{-idirafter} would.

@item -isysroot @var{dir}
@opindex isysroot
This option is like the @option{--sysroot} option, but applies only to
header files, except for Apple's version of GCC, where it applies to
both header files and libraries and effectively replaces the
@option{--sysroot} option.
See the @option{--sysroot} option for more information.

@item -imultilib @var{dir}
@opindex imultilib
Use @var{dir} as a subdirectory of the directory containing
target-specific C++ headers.

@item -isystem @var{dir}
@opindex isystem
Search @var{dir} for header files, after all directories specified by
@option{-I} but before the standard system directories.  Mark it
as a system directory, so that it gets the same special treatment as
is applied to the standard system directories.
@ifset cppmanual
@xref{System Headers}.
@end ifset

@item -iquote @var{dir}
@opindex iquote
Search @var{dir} only for header files requested with
@code{@w{#include "@var{file}"}}; they are not searched for
@code{@w{#include <@var{file}>}}, before all directories specified by
@option{-I} and before the standard system directories.
@ifset cppmanual
@xref{Search Path}.
@end ifset

@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
experimental; in a future version of GCC, it will be enabled by
default for C99 and C++.

@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 -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 -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.

@item -fworking-directory
@opindex fworking-directory
@opindex fno-working-directory
Enable generation of linemarkers in the preprocessor output that will
let the compiler know the current working directory at the time of
preprocessing.  When this option is enabled, the preprocessor will
emit, after the initial linemarker, a second linemarker with the
current working directory followed by two slashes.  GCC will use 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 -fno-show-column
@opindex fno-show-column
Do not print column numbers in diagnostics.  This may be necessary if
diagnostics are being scanned by a program that does not understand the
column numbers, such as @command{dejagnu}.

@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{Assertions}.
@end ifset

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

@item -dCHARS
@var{CHARS} is a sequence of one or more of the following characters,
and must not be preceded by a space.  Other characters are interpreted
by the compiler proper, or reserved for future versions of GCC, and so
are silently ignored.  If you specify characters whose behavior
conflicts, the result is undefined.

@table @samp
@item M
@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
will show all the predefined macros.

@c APPLE LOCAL begin mainline
If you use @option{-dM} without the @option{-E} option, @option{-dM} is
interpreted as a synonym for @option{-fdump-rtl-mach}.
@xref{Debugging Options, , ,gcc}.

@c APPLE LOCAL end mainline
@item D
@opindex dD
Like @samp{M} 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 N
@opindex dN
Like @samp{D}, but emit only the macro names, not their expansions.

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

@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

@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
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 -traditional-cpp
@opindex traditional-cpp
Try to imitate the behavior of old-fashioned C preprocessors, as
opposed to ISO C preprocessors.
@ifset cppmanual
@xref{Traditional Mode}.
@end ifset

@item -trigraphs
@opindex trigraphs
Process trigraph sequences.
@ifset cppmanual
@xref{Initial processing}.
@end ifset
@ifclear cppmanual
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.  By default, GCC ignores trigraphs, but in
standard-conforming modes it converts them.  See the @option{-std} and
@option{-ansi} options.

The nine trigraphs and their replacements are

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

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

@itemx --help
@itemx --target-help
@opindex help
@opindex target-help
Print text describing all the command line options instead of
preprocessing anything.

@item -v
@opindex v
Verbose mode.  Print out GNU CPP's version number at the beginning of
execution, and report the final form of the include path.

@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 -version
@itemx --version
@opindex version
Print out GNU CPP's version number.  With one dash, proceed to
preprocess as normal.  With two dashes, exit immediately.
@end table
