123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836 |
- @c Copyright (C) 1999-2015 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
- .
- If @var{dir} begins with @code{=}, then the @code{=} will be replaced
- by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
- @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 -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 @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
- 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.
- @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 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 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.
- @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 "@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 -x c
- @itemx -x c++
- @itemx -x objective-c
- @itemx -x assembler-with-cpp
- @opindex x
- Specify the source language: C, 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:
- @samp{.c}, @samp{.cc}, @samp{.m}, 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 c90
- @itemx c89
- @itemx iso9899:1990
- The ISO C standard from 1990. @samp{c90} is the customary shorthand for
- this version of the standard.
- The @option{-ansi} option is equivalent to @option{-std=c90}.
- @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 iso9899:2011
- @itemx c11
- @itemx c1x
- The revised ISO C standard, published in December 2011. Before
- publication, this was known as C1X@.
- @item gnu90
- @itemx gnu89
- The 1990 C standard plus GNU extensions. This is the default.
- @item gnu99
- @itemx gnu9x
- The 1999 C standard plus GNU extensions.
- @item gnu11
- @itemx gnu1x
- The 2011 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.
- If @var{dir} begins with @code{=}, then the @code{=} will be replaced
- by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
- @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 Darwin targets, where it applies to both header
- files and libraries). 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
- If @var{dir} begins with @code{=}, then the @code{=} will be replaced
- by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
- @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
- If @var{dir} begins with @code{=}, then the @code{=} will be replaced
- by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
- @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 -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 -fdebug-cpp
- @opindex fdebug-cpp
- This option is only useful for debugging GCC. When used with
- @option{-E}, dumps debugging information about location maps. Every
- token in the output is preceded by the dump of the map its location
- belongs to. The dump of the map holding the location of a token would
- be:
- @smallexample
- @{@samp{P}:@file{/file/path};@samp{F}:@file{/includer/path};@samp{L}:@var{line_num};@samp{C}:@var{col_num};@samp{S}:@var{system_header_p};@samp{M}:@var{map_address};@samp{E}:@var{macro_expansion_p},@samp{loc}:@var{location}@}
- @end smallexample
- When used without @option{-E}, this option has no effect.
- @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 just as if no @option{-ftrack-macro-expansion} was present
- on the command line. 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.
- @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{Obsolete Features}.
- @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.
- 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}.
- @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.
- @item U
- @opindex dU
- Like @samp{D} 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 -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@.
- @item --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
|