Home | History | Annotate | Line # | Download | only in doc
cppopts.texi revision 1.1.1.1
      1 @c Copyright (c) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
      2 @c 2010, Free Software Foundation, Inc.
      3 @c This is part of the CPP and GCC manuals.
      4 @c For copying conditions, see the file gcc.texi.
      5 
      6 @c ---------------------------------------------------------------------
      7 @c Options affecting the preprocessor
      8 @c ---------------------------------------------------------------------
      9 
     10 @c If this file is included with the flag ``cppmanual'' set, it is
     11 @c formatted for inclusion in the CPP manual; otherwise the main GCC manual.
     12 
     13 @table @gcctabopt
     14 @item -D @var{name}
     15 @opindex D
     16 Predefine @var{name} as a macro, with definition @code{1}.
     17 
     18 @item -D @var{name}=@var{definition}
     19 The contents of @var{definition} are tokenized and processed as if
     20 they appeared during translation phase three in a @samp{#define}
     21 directive.  In particular, the definition will be truncated by
     22 embedded newline characters.
     23 
     24 If you are invoking the preprocessor from a shell or shell-like
     25 program you may need to use the shell's quoting syntax to protect
     26 characters such as spaces that have a meaning in the shell syntax.
     27 
     28 If you wish to define a function-like macro on the command line, write
     29 its argument list with surrounding parentheses before the equals sign
     30 (if any).  Parentheses are meaningful to most shells, so you will need
     31 to quote the option.  With @command{sh} and @command{csh},
     32 @option{-D'@var{name}(@var{args@dots{}})=@var{definition}'} works.
     33 
     34 @option{-D} and @option{-U} options are processed in the order they
     35 are given on the command line.  All @option{-imacros @var{file}} and
     36 @option{-include @var{file}} options are processed after all
     37 @option{-D} and @option{-U} options.
     38 
     39 @item -U @var{name}
     40 @opindex U
     41 Cancel any previous definition of @var{name}, either built in or
     42 provided with a @option{-D} option.
     43 
     44 @item -undef
     45 @opindex undef
     46 Do not predefine any system-specific or GCC-specific macros.  The
     47 standard predefined macros remain defined.
     48 @ifset cppmanual
     49 @xref{Standard Predefined Macros}.
     50 @end ifset
     51 
     52 @item -I @var{dir}
     53 @opindex I
     54 Add the directory @var{dir} to the list of directories to be searched
     55 for header files.
     56 @ifset cppmanual
     57 @xref{Search Path}.
     58 @end ifset
     59 Directories named by @option{-I} are searched before the standard
     60 system include directories.  If the directory @var{dir} is a standard
     61 system include directory, the option is ignored to ensure that the
     62 default search order for system directories and the special treatment
     63 of system headers are not defeated
     64 @ifset cppmanual
     65 (@pxref{System Headers})
     66 @end ifset
     67 .
     68 If @var{dir} begins with @code{=}, then the @code{=} will be replaced
     69 by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
     70 
     71 @item -o @var{file}
     72 @opindex o
     73 Write output to @var{file}.  This is the same as specifying @var{file}
     74 as the second non-option argument to @command{cpp}.  @command{gcc} has a
     75 different interpretation of a second non-option argument, so you must
     76 use @option{-o} to specify the output file.
     77 
     78 @item -Wall
     79 @opindex Wall
     80 Turns on all optional warnings which are desirable for normal code.
     81 At present this is @option{-Wcomment}, @option{-Wtrigraphs},
     82 @option{-Wmultichar} and a warning about integer promotion causing a
     83 change of sign in @code{#if} expressions.  Note that many of the
     84 preprocessor's warnings are on by default and have no options to
     85 control them.
     86 
     87 @item -Wcomment
     88 @itemx -Wcomments
     89 @opindex Wcomment
     90 @opindex Wcomments
     91 Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
     92 comment, or whenever a backslash-newline appears in a @samp{//} comment.
     93 (Both forms have the same effect.)
     94 
     95 @item -Wtrigraphs
     96 @opindex Wtrigraphs
     97 @anchor{Wtrigraphs}
     98 Most trigraphs in comments cannot affect the meaning of the program.
     99 However, a trigraph that would form an escaped newline (@samp{??/} at
    100 the end of a line) can, by changing where the comment begins or ends.
    101 Therefore, only trigraphs that would form escaped newlines produce
    102 warnings inside a comment.
    103 
    104 This option is implied by @option{-Wall}.  If @option{-Wall} is not
    105 given, this option is still enabled unless trigraphs are enabled.  To
    106 get trigraph conversion without warnings, but get the other
    107 @option{-Wall} warnings, use @samp{-trigraphs -Wall -Wno-trigraphs}.
    108 
    109 @item -Wtraditional
    110 @opindex Wtraditional
    111 Warn about certain constructs that behave differently in traditional and
    112 ISO C@.  Also warn about ISO C constructs that have no traditional C
    113 equivalent, and problematic constructs which should be avoided.
    114 @ifset cppmanual
    115 @xref{Traditional Mode}.
    116 @end ifset
    117 
    118 @item -Wundef
    119 @opindex Wundef
    120 Warn whenever an identifier which is not a macro is encountered in an
    121 @samp{#if} directive, outside of @samp{defined}.  Such identifiers are
    122 replaced with zero.
    123 
    124 @item -Wunused-macros
    125 @opindex Wunused-macros
    126 Warn about macros defined in the main file that are unused.  A macro
    127 is @dfn{used} if it is expanded or tested for existence at least once.
    128 The preprocessor will also warn if the macro has not been used at the
    129 time it is redefined or undefined.
    130 
    131 Built-in macros, macros defined on the command line, and macros
    132 defined in include files are not warned about.
    133 
    134 @emph{Note:} If a macro is actually used, but only used in skipped
    135 conditional blocks, then CPP will report it as unused.  To avoid the
    136 warning in such a case, you might improve the scope of the macro's
    137 definition by, for example, moving it into the first skipped block.
    138 Alternatively, you could provide a dummy use with something like:
    139 
    140 @smallexample
    141 #if defined the_macro_causing_the_warning
    142 #endif
    143 @end smallexample
    144 
    145 @item -Wendif-labels
    146 @opindex Wendif-labels
    147 Warn whenever an @samp{#else} or an @samp{#endif} are followed by text.
    148 This usually happens in code of the form
    149 
    150 @smallexample
    151 #if FOO
    152 @dots{}
    153 #else FOO
    154 @dots{}
    155 #endif FOO
    156 @end smallexample
    157 
    158 @noindent
    159 The second and third @code{FOO} should be in comments, but often are not
    160 in older programs.  This warning is on by default.
    161 
    162 @item -Werror
    163 @opindex Werror
    164 Make all warnings into hard errors.  Source code which triggers warnings
    165 will be rejected.
    166 
    167 @item -Wsystem-headers
    168 @opindex Wsystem-headers
    169 Issue warnings for code in system headers.  These are normally unhelpful
    170 in finding bugs in your own code, therefore suppressed.  If you are
    171 responsible for the system library, you may want to see them.
    172 
    173 @item -w
    174 @opindex w
    175 Suppress all warnings, including those which GNU CPP issues by default.
    176 
    177 @item -pedantic
    178 @opindex pedantic
    179 Issue all the mandatory diagnostics listed in the C standard.  Some of
    180 them are left out by default, since they trigger frequently on harmless
    181 code.
    182 
    183 @item -pedantic-errors
    184 @opindex pedantic-errors
    185 Issue all the mandatory diagnostics, and make all mandatory diagnostics
    186 into errors.  This includes mandatory diagnostics that GCC issues
    187 without @samp{-pedantic} but treats as warnings.
    188 
    189 @item -M
    190 @opindex M
    191 @cindex make
    192 @cindex dependencies, make
    193 Instead of outputting the result of preprocessing, output a rule
    194 suitable for @command{make} describing the dependencies of the main
    195 source file.  The preprocessor outputs one @command{make} rule containing
    196 the object file name for that source file, a colon, and the names of all
    197 the included files, including those coming from @option{-include} or
    198 @option{-imacros} command line options.
    199 
    200 Unless specified explicitly (with @option{-MT} or @option{-MQ}), the
    201 object file name consists of the name of the source file with any
    202 suffix replaced with object file suffix and with any leading directory
    203 parts removed.  If there are many included files then the rule is
    204 split into several lines using @samp{\}-newline.  The rule has no
    205 commands.
    206 
    207 This option does not suppress the preprocessor's debug output, such as
    208 @option{-dM}.  To avoid mixing such debug output with the dependency
    209 rules you should explicitly specify the dependency output file with
    210 @option{-MF}, or use an environment variable like
    211 @env{DEPENDENCIES_OUTPUT} (@pxref{Environment Variables}).  Debug output
    212 will still be sent to the regular output stream as normal.
    213 
    214 Passing @option{-M} to the driver implies @option{-E}, and suppresses
    215 warnings with an implicit @option{-w}.
    216 
    217 @item -MM
    218 @opindex MM
    219 Like @option{-M} but do not mention header files that are found in
    220 system header directories, nor header files that are included,
    221 directly or indirectly, from such a header.
    222 
    223 This implies that the choice of angle brackets or double quotes in an
    224 @samp{#include} directive does not in itself determine whether that
    225 header will appear in @option{-MM} dependency output.  This is a
    226 slight change in semantics from GCC versions 3.0 and earlier.
    227 
    228 @anchor{dashMF}
    229 @item -MF @var{file}
    230 @opindex MF
    231 When used with @option{-M} or @option{-MM}, specifies a
    232 file to write the dependencies to.  If no @option{-MF} switch is given
    233 the preprocessor sends the rules to the same place it would have sent
    234 preprocessed output.
    235 
    236 When used with the driver options @option{-MD} or @option{-MMD},
    237 @option{-MF} overrides the default dependency output file.
    238 
    239 @item -MG
    240 @opindex MG
    241 In conjunction with an option such as @option{-M} requesting
    242 dependency generation, @option{-MG} assumes missing header files are
    243 generated files and adds them to the dependency list without raising
    244 an error.  The dependency filename is taken directly from the
    245 @code{#include} directive without prepending any path.  @option{-MG}
    246 also suppresses preprocessed output, as a missing header file renders
    247 this useless.
    248 
    249 This feature is used in automatic updating of makefiles.
    250 
    251 @item -MP
    252 @opindex MP
    253 This option instructs CPP to add a phony target for each dependency
    254 other than the main file, causing each to depend on nothing.  These
    255 dummy rules work around errors @command{make} gives if you remove header
    256 files without updating the @file{Makefile} to match.
    257 
    258 This is typical output:
    259 
    260 @smallexample
    261 test.o: test.c test.h
    262 
    263 test.h:
    264 @end smallexample
    265 
    266 @item -MT @var{target}
    267 @opindex MT
    268 
    269 Change the target of the rule emitted by dependency generation.  By
    270 default CPP takes the name of the main input file, deletes any
    271 directory components and any file suffix such as @samp{.c}, and
    272 appends the platform's usual object suffix.  The result is the target.
    273 
    274 An @option{-MT} option will set the target to be exactly the string you
    275 specify.  If you want multiple targets, you can specify them as a single
    276 argument to @option{-MT}, or use multiple @option{-MT} options.
    277 
    278 For example, @option{@w{-MT '$(objpfx)foo.o'}} might give
    279 
    280 @smallexample
    281 $(objpfx)foo.o: foo.c
    282 @end smallexample
    283 
    284 @item -MQ @var{target}
    285 @opindex MQ
    286 
    287 Same as @option{-MT}, but it quotes any characters which are special to
    288 Make.  @option{@w{-MQ '$(objpfx)foo.o'}} gives
    289 
    290 @smallexample
    291 $$(objpfx)foo.o: foo.c
    292 @end smallexample
    293 
    294 The default target is automatically quoted, as if it were given with
    295 @option{-MQ}.
    296 
    297 @item -MD
    298 @opindex MD
    299 @option{-MD} is equivalent to @option{-M -MF @var{file}}, except that
    300 @option{-E} is not implied.  The driver determines @var{file} based on
    301 whether an @option{-o} option is given.  If it is, the driver uses its
    302 argument but with a suffix of @file{.d}, otherwise it takes the name
    303 of the input file, removes any directory components and suffix, and
    304 applies a @file{.d} suffix.
    305 
    306 If @option{-MD} is used in conjunction with @option{-E}, any
    307 @option{-o} switch is understood to specify the dependency output file
    308 (@pxref{dashMF,,-MF}), but if used without @option{-E}, each @option{-o}
    309 is understood to specify a target object file.
    310 
    311 Since @option{-E} is not implied, @option{-MD} can be used to generate
    312 a dependency output file as a side-effect of the compilation process.
    313 
    314 @item -MMD
    315 @opindex MMD
    316 Like @option{-MD} except mention only user header files, not system
    317 header files.
    318 
    319 @ifclear cppmanual
    320 @item -fpch-deps
    321 @opindex fpch-deps
    322 When using precompiled headers (@pxref{Precompiled Headers}), this flag
    323 will cause the dependency-output flags to also list the files from the
    324 precompiled header's dependencies.  If not specified only the
    325 precompiled header would be listed and not the files that were used to
    326 create it because those files are not consulted when a precompiled
    327 header is used.
    328 
    329 @item -fpch-preprocess
    330 @opindex fpch-preprocess
    331 This option allows use of a precompiled header (@pxref{Precompiled
    332 Headers}) together with @option{-E}.  It inserts a special @code{#pragma},
    333 @code{#pragma GCC pch_preprocess "<filename>"} in the output to mark
    334 the place where the precompiled header was found, and its filename.  When
    335 @option{-fpreprocessed} is in use, GCC recognizes this @code{#pragma} and
    336 loads the PCH@.
    337 
    338 This option is off by default, because the resulting preprocessed output
    339 is only really suitable as input to GCC@.  It is switched on by
    340 @option{-save-temps}.
    341 
    342 You should not write this @code{#pragma} in your own code, but it is
    343 safe to edit the filename if the PCH file is available in a different
    344 location.  The filename may be absolute or it may be relative to GCC's
    345 current directory.
    346 
    347 @end ifclear
    348 @item -x c
    349 @itemx -x c++
    350 @itemx -x objective-c
    351 @itemx -x assembler-with-cpp
    352 @opindex x
    353 Specify the source language: C, C++, Objective-C, or assembly.  This has
    354 nothing to do with standards conformance or extensions; it merely
    355 selects which base syntax to expect.  If you give none of these options,
    356 cpp will deduce the language from the extension of the source file:
    357 @samp{.c}, @samp{.cc}, @samp{.m}, or @samp{.S}.  Some other common
    358 extensions for C++ and assembly are also recognized.  If cpp does not
    359 recognize the extension, it will treat the file as C; this is the most
    360 generic mode.
    361 
    362 @emph{Note:} Previous versions of cpp accepted a @option{-lang} option
    363 which selected both the language and the standards conformance level.
    364 This option has been removed, because it conflicts with the @option{-l}
    365 option.
    366 
    367 @item -std=@var{standard}
    368 @itemx -ansi
    369 @opindex ansi
    370 @opindex std=
    371 Specify the standard to which the code should conform.  Currently CPP
    372 knows about C and C++ standards; others may be added in the future.
    373 
    374 @var{standard}
    375 may be one of:
    376 @table @code
    377 @item c90
    378 @itemx c89
    379 @itemx iso9899:1990
    380 The ISO C standard from 1990.  @samp{c90} is the customary shorthand for
    381 this version of the standard.
    382 
    383 The @option{-ansi} option is equivalent to @option{-std=c90}.
    384 
    385 @item iso9899:199409
    386 The 1990 C standard, as amended in 1994.
    387 
    388 @item iso9899:1999
    389 @itemx c99
    390 @itemx iso9899:199x
    391 @itemx c9x
    392 The revised ISO C standard, published in December 1999.  Before
    393 publication, this was known as C9X@.
    394 
    395 @item gnu90
    396 @itemx gnu89
    397 The 1990 C standard plus GNU extensions.  This is the default.
    398 
    399 @item gnu99
    400 @itemx gnu9x
    401 The 1999 C standard plus GNU extensions.
    402 
    403 @item c++98
    404 The 1998 ISO C++ standard plus amendments.
    405 
    406 @item gnu++98
    407 The same as @option{-std=c++98} plus GNU extensions.  This is the
    408 default for C++ code.
    409 @end table
    410 
    411 @item -I-
    412 @opindex I-
    413 Split the include path.  Any directories specified with @option{-I}
    414 options before @option{-I-} are searched only for headers requested with
    415 @code{@w{#include "@var{file}"}}; they are not searched for
    416 @code{@w{#include <@var{file}>}}.  If additional directories are
    417 specified with @option{-I} options after the @option{-I-}, those
    418 directories are searched for all @samp{#include} directives.
    419 
    420 In addition, @option{-I-} inhibits the use of the directory of the current
    421 file directory as the first search directory for @code{@w{#include
    422 "@var{file}"}}.
    423 @ifset cppmanual
    424 @xref{Search Path}.
    425 @end ifset
    426 This option has been deprecated.
    427 
    428 @item -nostdinc
    429 @opindex nostdinc
    430 Do not search the standard system directories for header files.
    431 Only the directories you have specified with @option{-I} options
    432 (and the directory of the current file, if appropriate) are searched.
    433 
    434 @item -nostdinc++
    435 @opindex nostdinc++
    436 Do not search for header files in the C++-specific standard directories,
    437 but do still search the other standard directories.  (This option is
    438 used when building the C++ library.)
    439 
    440 @item -include @var{file}
    441 @opindex include
    442 Process @var{file} as if @code{#include "file"} appeared as the first
    443 line of the primary source file.  However, the first directory searched
    444 for @var{file} is the preprocessor's working directory @emph{instead of}
    445 the directory containing the main source file.  If not found there, it
    446 is searched for in the remainder of the @code{#include "@dots{}"} search
    447 chain as normal.
    448 
    449 If multiple @option{-include} options are given, the files are included
    450 in the order they appear on the command line.
    451 
    452 @item -imacros @var{file}
    453 @opindex imacros
    454 Exactly like @option{-include}, except that any output produced by
    455 scanning @var{file} is thrown away.  Macros it defines remain defined.
    456 This allows you to acquire all the macros from a header without also
    457 processing its declarations.
    458 
    459 All files specified by @option{-imacros} are processed before all files
    460 specified by @option{-include}.
    461 
    462 @item -idirafter @var{dir}
    463 @opindex idirafter
    464 Search @var{dir} for header files, but do it @emph{after} all
    465 directories specified with @option{-I} and the standard system directories
    466 have been exhausted.  @var{dir} is treated as a system include directory.
    467 If @var{dir} begins with @code{=}, then the @code{=} will be replaced
    468 by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
    469 
    470 @item -iprefix @var{prefix}
    471 @opindex iprefix
    472 Specify @var{prefix} as the prefix for subsequent @option{-iwithprefix}
    473 options.  If the prefix represents a directory, you should include the
    474 final @samp{/}.
    475 
    476 @item -iwithprefix @var{dir}
    477 @itemx -iwithprefixbefore @var{dir}
    478 @opindex iwithprefix
    479 @opindex iwithprefixbefore
    480 Append @var{dir} to the prefix specified previously with
    481 @option{-iprefix}, and add the resulting directory to the include search
    482 path.  @option{-iwithprefixbefore} puts it in the same place @option{-I}
    483 would; @option{-iwithprefix} puts it where @option{-idirafter} would.
    484 
    485 @item -isysroot @var{dir}
    486 @opindex isysroot
    487 This option is like the @option{--sysroot} option, but applies only to
    488 header files.  See the @option{--sysroot} option for more information.
    489 
    490 @item -imultilib @var{dir}
    491 @opindex imultilib
    492 Use @var{dir} as a subdirectory of the directory containing
    493 target-specific C++ headers.
    494 
    495 @item -isystem @var{dir}
    496 @opindex isystem
    497 Search @var{dir} for header files, after all directories specified by
    498 @option{-I} but before the standard system directories.  Mark it
    499 as a system directory, so that it gets the same special treatment as
    500 is applied to the standard system directories.
    501 @ifset cppmanual
    502 @xref{System Headers}.
    503 @end ifset
    504 If @var{dir} begins with @code{=}, then the @code{=} will be replaced
    505 by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
    506 
    507 @item -cxx-isystem @var{dir}
    508 @opindex cxxisystem
    509 Search @var{dir} for C++ header files, after all directories specified by
    510 @option{-I} but before the standard system directories.  Mark it
    511 as a system directory, so that it gets the same special treatment as
    512 is applied to the standard system directories.
    513 @ifset cppmanual
    514 @xref{System Headers}.
    515 @end ifset
    516 
    517 @item -iquote @var{dir}
    518 @opindex iquote
    519 Search @var{dir} only for header files requested with
    520 @code{@w{#include "@var{file}"}}; they are not searched for
    521 @code{@w{#include <@var{file}>}}, before all directories specified by
    522 @option{-I} and before the standard system directories.
    523 @ifset cppmanual
    524 @xref{Search Path}.
    525 @end ifset
    526 If @var{dir} begins with @code{=}, then the @code{=} will be replaced
    527 by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}.
    528 
    529 @item -fdirectives-only
    530 @opindex fdirectives-only
    531 When preprocessing, handle directives, but do not expand macros.
    532 
    533 The option's behavior depends on the @option{-E} and @option{-fpreprocessed}
    534 options.
    535 
    536 With @option{-E}, preprocessing is limited to the handling of directives
    537 such as @code{#define}, @code{#ifdef}, and @code{#error}.  Other
    538 preprocessor operations, such as macro expansion and trigraph
    539 conversion are not performed.  In addition, the @option{-dD} option is
    540 implicitly enabled.
    541 
    542 With @option{-fpreprocessed}, predefinition of command line and most
    543 builtin macros is disabled.  Macros such as @code{__LINE__}, which are
    544 contextually dependent, are handled normally.  This enables compilation of
    545 files previously preprocessed with @code{-E -fdirectives-only}.
    546 
    547 With both @option{-E} and @option{-fpreprocessed}, the rules for
    548 @option{-fpreprocessed} take precedence.  This enables full preprocessing of
    549 files previously preprocessed with @code{-E -fdirectives-only}.
    550 
    551 @item -iremap @var{src}:@var{dst}
    552 @opindex iremap
    553 Replace the prefix @var{src} in __FILE__ with @var{dst} at expansion time.
    554 This option can be specified more than once.  Processing stops at the first
    555 match.
    556 
    557 @item -fdollars-in-identifiers
    558 @opindex fdollars-in-identifiers
    559 @anchor{fdollars-in-identifiers}
    560 Accept @samp{$} in identifiers.
    561 @ifset cppmanual
    562 @xref{Identifier characters}.
    563 @end ifset
    564 
    565 @item -fextended-identifiers
    566 @opindex fextended-identifiers
    567 Accept universal character names in identifiers.  This option is
    568 experimental; in a future version of GCC, it will be enabled by
    569 default for C99 and C++.
    570 
    571 @item -fpreprocessed
    572 @opindex fpreprocessed
    573 Indicate to the preprocessor that the input file has already been
    574 preprocessed.  This suppresses things like macro expansion, trigraph
    575 conversion, escaped newline splicing, and processing of most directives.
    576 The preprocessor still recognizes and removes comments, so that you can
    577 pass a file preprocessed with @option{-C} to the compiler without
    578 problems.  In this mode the integrated preprocessor is little more than
    579 a tokenizer for the front ends.
    580 
    581 @option{-fpreprocessed} is implicit if the input file has one of the
    582 extensions @samp{.i}, @samp{.ii} or @samp{.mi}.  These are the
    583 extensions that GCC uses for preprocessed files created by
    584 @option{-save-temps}.
    585 
    586 @item -ftabstop=@var{width}
    587 @opindex ftabstop
    588 Set the distance between tab stops.  This helps the preprocessor report
    589 correct column numbers in warnings or errors, even if tabs appear on the
    590 line.  If the value is less than 1 or greater than 100, the option is
    591 ignored.  The default is 8.
    592 
    593 @item -fexec-charset=@var{charset}
    594 @opindex fexec-charset
    595 @cindex character set, execution
    596 Set the execution character set, used for string and character
    597 constants.  The default is UTF-8.  @var{charset} can be any encoding
    598 supported by the system's @code{iconv} library routine.
    599 
    600 @item -fwide-exec-charset=@var{charset}
    601 @opindex fwide-exec-charset
    602 @cindex character set, wide execution
    603 Set the wide execution character set, used for wide string and
    604 character constants.  The default is UTF-32 or UTF-16, whichever
    605 corresponds to the width of @code{wchar_t}.  As with
    606 @option{-fexec-charset}, @var{charset} can be any encoding supported
    607 by the system's @code{iconv} library routine; however, you will have
    608 problems with encodings that do not fit exactly in @code{wchar_t}.
    609 
    610 @item -finput-charset=@var{charset}
    611 @opindex finput-charset
    612 @cindex character set, input
    613 Set the input character set, used for translation from the character
    614 set of the input file to the source character set used by GCC@.  If the
    615 locale does not specify, or GCC cannot get this information from the
    616 locale, the default is UTF-8.  This can be overridden by either the locale
    617 or this command line option.  Currently the command line option takes
    618 precedence if there's a conflict.  @var{charset} can be any encoding
    619 supported by the system's @code{iconv} library routine.
    620 
    621 @item -fworking-directory
    622 @opindex fworking-directory
    623 @opindex fno-working-directory
    624 Enable generation of linemarkers in the preprocessor output that will
    625 let the compiler know the current working directory at the time of
    626 preprocessing.  When this option is enabled, the preprocessor will
    627 emit, after the initial linemarker, a second linemarker with the
    628 current working directory followed by two slashes.  GCC will use this
    629 directory, when it's present in the preprocessed input, as the
    630 directory emitted as the current working directory in some debugging
    631 information formats.  This option is implicitly enabled if debugging
    632 information is enabled, but this can be inhibited with the negated
    633 form @option{-fno-working-directory}.  If the @option{-P} flag is
    634 present in the command line, this option has no effect, since no
    635 @code{#line} directives are emitted whatsoever.
    636 
    637 @item -fno-show-column
    638 @opindex fno-show-column
    639 Do not print column numbers in diagnostics.  This may be necessary if
    640 diagnostics are being scanned by a program that does not understand the
    641 column numbers, such as @command{dejagnu}.
    642 
    643 @item -A @var{predicate}=@var{answer}
    644 @opindex A
    645 Make an assertion with the predicate @var{predicate} and answer
    646 @var{answer}.  This form is preferred to the older form @option{-A
    647 @var{predicate}(@var{answer})}, which is still supported, because
    648 it does not use shell special characters.
    649 @ifset cppmanual
    650 @xref{Obsolete Features}.
    651 @end ifset
    652 
    653 @item -A -@var{predicate}=@var{answer}
    654 Cancel an assertion with the predicate @var{predicate} and answer
    655 @var{answer}.
    656 
    657 @item -dCHARS
    658 @var{CHARS} is a sequence of one or more of the following characters,
    659 and must not be preceded by a space.  Other characters are interpreted
    660 by the compiler proper, or reserved for future versions of GCC, and so
    661 are silently ignored.  If you specify characters whose behavior
    662 conflicts, the result is undefined.
    663 
    664 @table @samp
    665 @item M
    666 @opindex dM
    667 Instead of the normal output, generate a list of @samp{#define}
    668 directives for all the macros defined during the execution of the
    669 preprocessor, including predefined macros.  This gives you a way of
    670 finding out what is predefined in your version of the preprocessor.
    671 Assuming you have no file @file{foo.h}, the command
    672 
    673 @smallexample
    674 touch foo.h; cpp -dM foo.h
    675 @end smallexample
    676 
    677 @noindent
    678 will show all the predefined macros.
    679 
    680 If you use @option{-dM} without the @option{-E} option, @option{-dM} is
    681 interpreted as a synonym for @option{-fdump-rtl-mach}.
    682 @xref{Debugging Options, , ,gcc}.
    683 
    684 @item D
    685 @opindex dD
    686 Like @samp{M} except in two respects: it does @emph{not} include the
    687 predefined macros, and it outputs @emph{both} the @samp{#define}
    688 directives and the result of preprocessing.  Both kinds of output go to
    689 the standard output file.
    690 
    691 @item N
    692 @opindex dN
    693 Like @samp{D}, but emit only the macro names, not their expansions.
    694 
    695 @item I
    696 @opindex dI
    697 Output @samp{#include} directives in addition to the result of
    698 preprocessing.
    699 
    700 @item U
    701 @opindex dU
    702 Like @samp{D} except that only macros that are expanded, or whose
    703 definedness is tested in preprocessor directives, are output; the
    704 output is delayed until the use or test of the macro; and
    705 @samp{#undef} directives are also output for macros tested but
    706 undefined at the time.
    707 @end table
    708 
    709 @item -P
    710 @opindex P
    711 Inhibit generation of linemarkers in the output from the preprocessor.
    712 This might be useful when running the preprocessor on something that is
    713 not C code, and will be sent to a program which might be confused by the
    714 linemarkers.
    715 @ifset cppmanual
    716 @xref{Preprocessor Output}.
    717 @end ifset
    718 
    719 @item -C
    720 @opindex C
    721 Do not discard comments.  All comments are passed through to the output
    722 file, except for comments in processed directives, which are deleted
    723 along with the directive.
    724 
    725 You should be prepared for side effects when using @option{-C}; it
    726 causes the preprocessor to treat comments as tokens in their own right.
    727 For example, comments appearing at the start of what would be a
    728 directive line have the effect of turning that line into an ordinary
    729 source line, since the first token on the line is no longer a @samp{#}.
    730 
    731 @item -CC
    732 Do not discard comments, including during macro expansion.  This is
    733 like @option{-C}, except that comments contained within macros are
    734 also passed through to the output file where the macro is expanded.
    735 
    736 In addition to the side-effects of the @option{-C} option, the
    737 @option{-CC} option causes all C++-style comments inside a macro
    738 to be converted to C-style comments.  This is to prevent later use
    739 of that macro from inadvertently commenting out the remainder of
    740 the source line.
    741 
    742 The @option{-CC} option is generally used to support lint comments.
    743 
    744 @item -traditional-cpp
    745 @opindex traditional-cpp
    746 Try to imitate the behavior of old-fashioned C preprocessors, as
    747 opposed to ISO C preprocessors.
    748 @ifset cppmanual
    749 @xref{Traditional Mode}.
    750 @end ifset
    751 
    752 @item -trigraphs
    753 @opindex trigraphs
    754 Process trigraph sequences.
    755 @ifset cppmanual
    756 @xref{Initial processing}.
    757 @end ifset
    758 @ifclear cppmanual
    759 These are three-character sequences, all starting with @samp{??}, that
    760 are defined by ISO C to stand for single characters.  For example,
    761 @samp{??/} stands for @samp{\}, so @samp{'??/n'} is a character
    762 constant for a newline.  By default, GCC ignores trigraphs, but in
    763 standard-conforming modes it converts them.  See the @option{-std} and
    764 @option{-ansi} options.
    765 
    766 The nine trigraphs and their replacements are
    767 
    768 @smallexample
    769 Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??'  ??!  ??-
    770 Replacement:      [    ]    @{    @}    #    \    ^    |    ~
    771 @end smallexample
    772 @end ifclear
    773 
    774 @item -remap
    775 @opindex remap
    776 Enable special code to work around file systems which only permit very
    777 short file names, such as MS-DOS@.
    778 
    779 @itemx --help
    780 @itemx --target-help
    781 @opindex help
    782 @opindex target-help
    783 Print text describing all the command line options instead of
    784 preprocessing anything.
    785 
    786 @item -v
    787 @opindex v
    788 Verbose mode.  Print out GNU CPP's version number at the beginning of
    789 execution, and report the final form of the include path.
    790 
    791 @item -H
    792 @opindex H
    793 Print the name of each header file used, in addition to other normal
    794 activities.  Each name is indented to show how deep in the
    795 @samp{#include} stack it is.  Precompiled header files are also
    796 printed, even if they are found to be invalid; an invalid precompiled
    797 header file is printed with @samp{...x} and a valid one with @samp{...!} .
    798 
    799 @item -version
    800 @itemx --version
    801 @opindex version
    802 Print out GNU CPP's version number.  With one dash, proceed to
    803 preprocess as normal.  With two dashes, exit immediately.
    804 @end table
    805