1@c Copyright (C) 1999-2016 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 -cxx-isystem @var{dir} 519@opindex cxxisystem 520Search @var{dir} for C++ header files, after all directories specified by 521@option{-I} but before the standard system directories. Mark it 522as a system directory, so that it gets the same special treatment as 523is applied to the standard system directories. 524@ifset cppmanual 525@xref{System Headers}. 526@end ifset 527 528@item -iquote @var{dir} 529@opindex iquote 530Search @var{dir} only for header files requested with 531@code{@w{#include "@var{file}"}}; they are not searched for 532@code{@w{#include <@var{file}>}}, before all directories specified by 533@option{-I} and before the standard system directories. 534@ifset cppmanual 535@xref{Search Path}. 536@end ifset 537If @var{dir} begins with @code{=}, then the @code{=} will be replaced 538by the sysroot prefix; see @option{--sysroot} and @option{-isysroot}. 539 540@item -fdirectives-only 541@opindex fdirectives-only 542When preprocessing, handle directives, but do not expand macros. 543 544The option's behavior depends on the @option{-E} and @option{-fpreprocessed} 545options. 546 547With @option{-E}, preprocessing is limited to the handling of directives 548such as @code{#define}, @code{#ifdef}, and @code{#error}. Other 549preprocessor operations, such as macro expansion and trigraph 550conversion are not performed. In addition, the @option{-dD} option is 551implicitly enabled. 552 553With @option{-fpreprocessed}, predefinition of command line and most 554builtin macros is disabled. Macros such as @code{__LINE__}, which are 555contextually dependent, are handled normally. This enables compilation of 556files previously preprocessed with @code{-E -fdirectives-only}. 557 558With both @option{-E} and @option{-fpreprocessed}, the rules for 559@option{-fpreprocessed} take precedence. This enables full preprocessing of 560files previously preprocessed with @code{-E -fdirectives-only}. 561 562@item -iremap @var{src}:@var{dst} 563@opindex iremap 564Replace the prefix @var{src} in __FILE__ with @var{dst} at expansion time. 565This option can be specified more than once. Processing stops at the first 566match. 567 568@item -fdollars-in-identifiers 569@opindex fdollars-in-identifiers 570@anchor{fdollars-in-identifiers} 571Accept @samp{$} in identifiers. 572@ifset cppmanual 573@xref{Identifier characters}. 574@end ifset 575 576@item -fextended-identifiers 577@opindex fextended-identifiers 578Accept universal character names in identifiers. This option is 579enabled by default for C99 (and later C standard versions) and C++. 580 581@item -fno-canonical-system-headers 582@opindex fno-canonical-system-headers 583When preprocessing, do not shorten system header paths with canonicalization. 584 585@item -fpreprocessed 586@opindex fpreprocessed 587Indicate to the preprocessor that the input file has already been 588preprocessed. This suppresses things like macro expansion, trigraph 589conversion, escaped newline splicing, and processing of most directives. 590The preprocessor still recognizes and removes comments, so that you can 591pass a file preprocessed with @option{-C} to the compiler without 592problems. In this mode the integrated preprocessor is little more than 593a tokenizer for the front ends. 594 595@option{-fpreprocessed} is implicit if the input file has one of the 596extensions @samp{.i}, @samp{.ii} or @samp{.mi}. These are the 597extensions that GCC uses for preprocessed files created by 598@option{-save-temps}. 599 600@item -ftabstop=@var{width} 601@opindex ftabstop 602Set the distance between tab stops. This helps the preprocessor report 603correct column numbers in warnings or errors, even if tabs appear on the 604line. If the value is less than 1 or greater than 100, the option is 605ignored. The default is 8. 606 607@item -fdebug-cpp 608@opindex fdebug-cpp 609This option is only useful for debugging GCC. When used with 610@option{-E}, dumps debugging information about location maps. Every 611token in the output is preceded by the dump of the map its location 612belongs to. The dump of the map holding the location of a token would 613be: 614@smallexample 615@{@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}@} 616@end smallexample 617 618When used without @option{-E}, this option has no effect. 619 620@item -ftrack-macro-expansion@r{[}=@var{level}@r{]} 621@opindex ftrack-macro-expansion 622Track locations of tokens across macro expansions. This allows the 623compiler to emit diagnostic about the current macro expansion stack 624when a compilation error occurs in a macro expansion. Using this 625option makes the preprocessor and the compiler consume more 626memory. The @var{level} parameter can be used to choose the level of 627precision of token location tracking thus decreasing the memory 628consumption if necessary. Value @samp{0} of @var{level} de-activates 629this option just as if no @option{-ftrack-macro-expansion} was present 630on the command line. Value @samp{1} tracks tokens locations in a 631degraded mode for the sake of minimal memory overhead. In this mode 632all tokens resulting from the expansion of an argument of a 633function-like macro have the same location. Value @samp{2} tracks 634tokens locations completely. This value is the most memory hungry. 635When this option is given no argument, the default parameter value is 636@samp{2}. 637 638Note that @code{-ftrack-macro-expansion=2} is activated by default. 639 640@item -fexec-charset=@var{charset} 641@opindex fexec-charset 642@cindex character set, execution 643Set the execution character set, used for string and character 644constants. The default is UTF-8. @var{charset} can be any encoding 645supported by the system's @code{iconv} library routine. 646 647@item -fwide-exec-charset=@var{charset} 648@opindex fwide-exec-charset 649@cindex character set, wide execution 650Set the wide execution character set, used for wide string and 651character constants. The default is UTF-32 or UTF-16, whichever 652corresponds to the width of @code{wchar_t}. As with 653@option{-fexec-charset}, @var{charset} can be any encoding supported 654by the system's @code{iconv} library routine; however, you will have 655problems with encodings that do not fit exactly in @code{wchar_t}. 656 657@item -finput-charset=@var{charset} 658@opindex finput-charset 659@cindex character set, input 660Set the input character set, used for translation from the character 661set of the input file to the source character set used by GCC@. If the 662locale does not specify, or GCC cannot get this information from the 663locale, the default is UTF-8. This can be overridden by either the locale 664or this command-line option. Currently the command-line option takes 665precedence if there's a conflict. @var{charset} can be any encoding 666supported by the system's @code{iconv} library routine. 667 668@item -fworking-directory 669@opindex fworking-directory 670@opindex fno-working-directory 671Enable generation of linemarkers in the preprocessor output that will 672let the compiler know the current working directory at the time of 673preprocessing. When this option is enabled, the preprocessor will 674emit, after the initial linemarker, a second linemarker with the 675current working directory followed by two slashes. GCC will use this 676directory, when it's present in the preprocessed input, as the 677directory emitted as the current working directory in some debugging 678information formats. This option is implicitly enabled if debugging 679information is enabled, but this can be inhibited with the negated 680form @option{-fno-working-directory}. If the @option{-P} flag is 681present in the command line, this option has no effect, since no 682@code{#line} directives are emitted whatsoever. 683 684@item -fno-show-column 685@opindex fno-show-column 686Do not print column numbers in diagnostics. This may be necessary if 687diagnostics are being scanned by a program that does not understand the 688column numbers, such as @command{dejagnu}. 689 690@item -A @var{predicate}=@var{answer} 691@opindex A 692Make an assertion with the predicate @var{predicate} and answer 693@var{answer}. This form is preferred to the older form @option{-A 694@var{predicate}(@var{answer})}, which is still supported, because 695it does not use shell special characters. 696@ifset cppmanual 697@xref{Obsolete Features}. 698@end ifset 699 700@item -A -@var{predicate}=@var{answer} 701Cancel an assertion with the predicate @var{predicate} and answer 702@var{answer}. 703 704@item -dCHARS 705@var{CHARS} is a sequence of one or more of the following characters, 706and must not be preceded by a space. Other characters are interpreted 707by the compiler proper, or reserved for future versions of GCC, and so 708are silently ignored. If you specify characters whose behavior 709conflicts, the result is undefined. 710 711@table @samp 712@item M 713@opindex dM 714Instead of the normal output, generate a list of @samp{#define} 715directives for all the macros defined during the execution of the 716preprocessor, including predefined macros. This gives you a way of 717finding out what is predefined in your version of the preprocessor. 718Assuming you have no file @file{foo.h}, the command 719 720@smallexample 721touch foo.h; cpp -dM foo.h 722@end smallexample 723 724@noindent 725will show all the predefined macros. 726 727If you use @option{-dM} without the @option{-E} option, @option{-dM} is 728interpreted as a synonym for @option{-fdump-rtl-mach}. 729@xref{Developer Options, , ,gcc}. 730 731@item D 732@opindex dD 733Like @samp{M} except in two respects: it does @emph{not} include the 734predefined macros, and it outputs @emph{both} the @samp{#define} 735directives and the result of preprocessing. Both kinds of output go to 736the standard output file. 737 738@item N 739@opindex dN 740Like @samp{D}, but emit only the macro names, not their expansions. 741 742@item I 743@opindex dI 744Output @samp{#include} directives in addition to the result of 745preprocessing. 746 747@item U 748@opindex dU 749Like @samp{D} except that only macros that are expanded, or whose 750definedness is tested in preprocessor directives, are output; the 751output is delayed until the use or test of the macro; and 752@samp{#undef} directives are also output for macros tested but 753undefined at the time. 754@end table 755 756@item -P 757@opindex P 758Inhibit generation of linemarkers in the output from the preprocessor. 759This might be useful when running the preprocessor on something that is 760not C code, and will be sent to a program which might be confused by the 761linemarkers. 762@ifset cppmanual 763@xref{Preprocessor Output}. 764@end ifset 765 766@item -C 767@opindex C 768Do not discard comments. All comments are passed through to the output 769file, except for comments in processed directives, which are deleted 770along with the directive. 771 772You should be prepared for side effects when using @option{-C}; it 773causes the preprocessor to treat comments as tokens in their own right. 774For example, comments appearing at the start of what would be a 775directive line have the effect of turning that line into an ordinary 776source line, since the first token on the line is no longer a @samp{#}. 777 778@item -CC 779Do not discard comments, including during macro expansion. This is 780like @option{-C}, except that comments contained within macros are 781also passed through to the output file where the macro is expanded. 782 783In addition to the side-effects of the @option{-C} option, the 784@option{-CC} option causes all C++-style comments inside a macro 785to be converted to C-style comments. This is to prevent later use 786of that macro from inadvertently commenting out the remainder of 787the source line. 788 789The @option{-CC} option is generally used to support lint comments. 790 791@item -traditional-cpp 792@opindex traditional-cpp 793Try to imitate the behavior of old-fashioned C preprocessors, as 794opposed to ISO C preprocessors. 795@ifset cppmanual 796@xref{Traditional Mode}. 797@end ifset 798 799@item -trigraphs 800@opindex trigraphs 801Process trigraph sequences. 802@ifset cppmanual 803@xref{Initial processing}. 804@end ifset 805@ifclear cppmanual 806These are three-character sequences, all starting with @samp{??}, that 807are defined by ISO C to stand for single characters. For example, 808@samp{??/} stands for @samp{\}, so @samp{'??/n'} is a character 809constant for a newline. By default, GCC ignores trigraphs, but in 810standard-conforming modes it converts them. See the @option{-std} and 811@option{-ansi} options. 812 813The nine trigraphs and their replacements are 814 815@smallexample 816Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 817Replacement: [ ] @{ @} # \ ^ | ~ 818@end smallexample 819@end ifclear 820 821@item -remap 822@opindex remap 823Enable special code to work around file systems which only permit very 824short file names, such as MS-DOS@. 825 826@item --help 827@itemx --target-help 828@opindex help 829@opindex target-help 830Print text describing all the command-line options instead of 831preprocessing anything. 832 833@item -v 834@opindex v 835Verbose mode. Print out GNU CPP's version number at the beginning of 836execution, and report the final form of the include path. 837 838@item -H 839@opindex H 840Print the name of each header file used, in addition to other normal 841activities. Each name is indented to show how deep in the 842@samp{#include} stack it is. Precompiled header files are also 843printed, even if they are found to be invalid; an invalid precompiled 844header file is printed with @samp{...x} and a valid one with @samp{...!} . 845 846@item -version 847@itemx --version 848@opindex version 849Print out GNU CPP's version number. With one dash, proceed to 850preprocess as normal. With two dashes, exit immediately. 851@end table 852