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