cppopts.texi revision 117395
1@c Copyright (c) 1999, 2000, 2001, 2002 2@c 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 16Predefine @var{name} as a macro, with definition @code{1}. 17 18@item -D @var{name}=@var{definition} 19Predefine @var{name} as a macro, with definition @var{definition}. 20There are no restrictions on the contents of @var{definition}, but if 21you are invoking the preprocessor from a shell or shell-like program you 22may need to use the shell's quoting syntax to protect characters such as 23spaces that have a meaning in the shell syntax. 24 25If you wish to define a function-like macro on the command line, write 26its argument list with surrounding parentheses before the equals sign 27(if any). Parentheses are meaningful to most shells, so you will need 28to quote the option. With @command{sh} and @command{csh}, 29@option{-D'@var{name}(@var{args@dots{}})=@var{definition}'} works. 30 31@option{-D} and @option{-U} options are processed in the order they 32are given on the command line. All @option{-imacros @var{file}} and 33@option{-include @var{file}} options are processed after all 34@option{-D} and @option{-U} options. 35 36@item -U @var{name} 37@opindex U 38Cancel any previous definition of @var{name}, either built in or 39provided with a @option{-D} option. 40 41@item -undef 42@opindex undef 43Do not predefine any system-specific macros. The common predefined 44macros remain defined. 45 46@item -I @var{dir} 47@opindex I 48Add the directory @var{dir} to the list of directories to be searched 49for header files. 50@ifset cppmanual 51@xref{Search Path}. 52@end ifset 53Directories named by @option{-I} are searched before the standard 54system include directories. If the directory @var{dir} is a standard 55system include directory, the option is ignored to ensure that the 56default search order for system directories and the special treatment 57of system headers are not defeated 58@ifset cppmanual 59(@pxref{System Headers}) 60@end ifset 61. 62 63@item -o @var{file} 64@opindex o 65Write output to @var{file}. This is the same as specifying @var{file} 66as the second non-option argument to @command{cpp}. @command{gcc} has a 67different interpretation of a second non-option argument, so you must 68use @option{-o} to specify the output file. 69 70@item -Wall 71@opindex Wall 72Turns on all optional warnings which are desirable for normal code. At 73present this is @option{-Wcomment} and @option{-Wtrigraphs}. Note that 74many of the preprocessor's warnings are on by default and have no 75options to control them. 76 77@item -Wcomment 78@itemx -Wcomments 79@opindex Wcomment 80@opindex Wcomments 81Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*} 82comment, or whenever a backslash-newline appears in a @samp{//} comment. 83(Both forms have the same effect.) 84 85@item -Wtrigraphs 86@opindex Wtrigraphs 87Warn if any trigraphs are encountered. This option used to take effect 88only if @option{-trigraphs} was also specified, but now works 89independently. Warnings are not given for trigraphs within comments, as 90they do not affect the meaning of the program. 91 92@item -Wtraditional 93@opindex Wtraditional 94Warn about certain constructs that behave differently in traditional and 95ISO C@. Also warn about ISO C constructs that have no traditional C 96equivalent, and problematic constructs which should be avoided. 97@ifset cppmanual 98@xref{Traditional Mode}. 99@end ifset 100 101@item -Wimport 102@opindex Wimport 103Warn the first time @samp{#import} is used. 104 105@item -Wundef 106@opindex Wundef 107Warn whenever an identifier which is not a macro is encountered in an 108@samp{#if} directive, outside of @samp{defined}. Such identifiers are 109replaced with zero. 110 111@item -Wunused-macros 112@opindex Wunused-macros 113Warn about macros defined in the main file that are unused. A macro 114is @dfn{used} if it is expanded or tested for existence at least once. 115The preprocessor will also warn if the macro has not been used at the 116time it is redefined or undefined. 117 118Built-in macros, macros defined on the command line, and macros 119defined in include files are not warned about. 120 121@strong{Note:} If a macro is actually used, but only used in skipped 122conditional blocks, then CPP will report it as unused. To avoid the 123warning in such a case, you might improve the scope of the macro's 124definition by, for example, moving it into the first skipped block. 125Alternatively, you could provide a dummy use with something like: 126 127@smallexample 128#if defined the_macro_causing_the_warning 129#endif 130@end smallexample 131 132@item -Wendif-labels 133@opindex Wendif-labels 134Warn whenever an @samp{#else} or an @samp{#endif} are followed by text. 135This usually happens in code of the form 136 137@smallexample 138#if FOO 139@dots{} 140#else FOO 141@dots{} 142#endif FOO 143@end smallexample 144 145@noindent 146The second and third @code{FOO} should be in comments, but often are not 147in older programs. This warning is on by default. 148 149@item -Werror 150@opindex Werror 151Make all warnings into hard errors. Source code which triggers warnings 152will be rejected. 153 154@item -Wsystem-headers 155@opindex Wsystem-headers 156Issue warnings for code in system headers. These are normally unhelpful 157in finding bugs in your own code, therefore suppressed. If you are 158responsible for the system library, you may want to see them. 159 160@item -w 161@opindex w 162Suppress all warnings, including those which GNU CPP issues by default. 163 164@item -pedantic 165@opindex pedantic 166Issue all the mandatory diagnostics listed in the C standard. Some of 167them are left out by default, since they trigger frequently on harmless 168code. 169 170@item -pedantic-errors 171@opindex pedantic-errors 172Issue all the mandatory diagnostics, and make all mandatory diagnostics 173into errors. This includes mandatory diagnostics that GCC issues 174without @samp{-pedantic} but treats as warnings. 175 176@item -M 177@opindex M 178@cindex make 179@cindex dependencies, make 180Instead of outputting the result of preprocessing, output a rule 181suitable for @command{make} describing the dependencies of the main 182source file. The preprocessor outputs one @command{make} rule containing 183the object file name for that source file, a colon, and the names of all 184the included files, including those coming from @option{-include} or 185@option{-imacros} command line options. 186 187Unless specified explicitly (with @option{-MT} or @option{-MQ}), the 188object file name consists of the basename of the source file with any 189suffix replaced with object file suffix. If there are many included 190files then the rule is split into several lines using @samp{\}-newline. 191The rule has no commands. 192 193This option does not suppress the preprocessor's debug output, such as 194@option{-dM}. To avoid mixing such debug output with the dependency 195rules you should explicitly specify the dependency output file with 196@option{-MF}, or use an environment variable like 197@env{DEPENDENCIES_OUTPUT} (@pxref{Environment Variables}). Debug output 198will still be sent to the regular output stream as normal. 199 200Passing @option{-M} to the driver implies @option{-E}, and suppresses 201warnings with an implicit @option{-w}. 202 203@item -MM 204@opindex MM 205Like @option{-M} but do not mention header files that are found in 206system header directories, nor header files that are included, 207directly or indirectly, from such a header. 208 209This implies that the choice of angle brackets or double quotes in an 210@samp{#include} directive does not in itself determine whether that 211header will appear in @option{-MM} dependency output. This is a 212slight change in semantics from GCC versions 3.0 and earlier. 213 214@item -MF @var{file} 215@opindex MF 216@anchor{-MF} 217When used with @option{-M} or @option{-MM}, specifies a 218file to write the dependencies to. If no @option{-MF} switch is given 219the preprocessor sends the rules to the same place it would have sent 220preprocessed output. 221 222When used with the driver options @option{-MD} or @option{-MMD}, 223@option{-MF} overrides the default dependency output file. 224 225@item -MG 226@opindex MG 227In conjunction with an option such as @option{-M} requesting 228dependency generation, @option{-MG} assumes missing header files are 229generated files and adds them to the dependency list without raising 230an error. The dependency filename is taken directly from the 231@code{#include} directive without prepending any path. @option{-MG} 232also suppresses preprocessed output, as a missing header file renders 233this useless. 234 235This feature is used in automatic updating of makefiles. 236 237@item -MP 238@opindex MP 239This option instructs CPP to add a phony target for each dependency 240other than the main file, causing each to depend on nothing. These 241dummy rules work around errors @command{make} gives if you remove header 242files without updating the @file{Makefile} to match. 243 244This is typical output: 245 246@example 247test.o: test.c test.h 248 249test.h: 250@end example 251 252@item -MT @var{target} 253@opindex MT 254 255Change the target of the rule emitted by dependency generation. By 256default CPP takes the name of the main input file, including any path, 257deletes any file suffix such as @samp{.c}, and appends the platform's 258usual object suffix. The result is the target. 259 260An @option{-MT} option will set the target to be exactly the string you 261specify. If you want multiple targets, you can specify them as a single 262argument to @option{-MT}, or use multiple @option{-MT} options. 263 264For example, @option{@w{-MT '$(objpfx)foo.o'}} might give 265 266@example 267$(objpfx)foo.o: foo.c 268@end example 269 270@item -MQ @var{target} 271@opindex MQ 272 273Same as @option{-MT}, but it quotes any characters which are special to 274Make. @option{@w{-MQ '$(objpfx)foo.o'}} gives 275 276@example 277$$(objpfx)foo.o: foo.c 278@end example 279 280The default target is automatically quoted, as if it were given with 281@option{-MQ}. 282 283@item -MD 284@opindex MD 285@option{-MD} is equivalent to @option{-M -MF @var{file}}, except that 286@option{-E} is not implied. The driver determines @var{file} based on 287whether an @option{-o} option is given. If it is, the driver uses its 288argument but with a suffix of @file{.d}, otherwise it take the 289basename of the input file and applies a @file{.d} suffix. 290 291If @option{-MD} is used in conjunction with @option{-E}, any 292@option{-o} switch is understood to specify the dependency output file 293(but @pxref{-MF}), but if used without @option{-E}, each @option{-o} 294is understood to specify a target object file. 295 296Since @option{-E} is not implied, @option{-MD} can be used to generate 297a dependency output file as a side-effect of the compilation process. 298 299@item -MMD 300@opindex MMD 301Like @option{-MD} except mention only user header files, not system 302-header files. 303 304@item -x c 305@itemx -x c++ 306@itemx -x objective-c 307@itemx -x assembler-with-cpp 308@opindex x 309Specify the source language: C, C++, Objective-C, or assembly. This has 310nothing to do with standards conformance or extensions; it merely 311selects which base syntax to expect. If you give none of these options, 312cpp will deduce the language from the extension of the source file: 313@samp{.c}, @samp{.cc}, @samp{.m}, or @samp{.S}. Some other common 314extensions for C++ and assembly are also recognized. If cpp does not 315recognize the extension, it will treat the file as C; this is the most 316generic mode. 317 318@strong{Note:} Previous versions of cpp accepted a @option{-lang} option 319which selected both the language and the standards conformance level. 320This option has been removed, because it conflicts with the @option{-l} 321option. 322 323@item -std=@var{standard} 324@itemx -ansi 325@opindex ansi 326@opindex std= 327Specify the standard to which the code should conform. Currently CPP 328knows about C and C++ standards; others may be added in the future. 329 330@var{standard} 331may be one of: 332@table @code 333@item iso9899:1990 334@itemx c89 335The ISO C standard from 1990. @samp{c89} is the customary shorthand for 336this version of the standard. 337 338The @option{-ansi} option is equivalent to @option{-std=c89}. 339 340@item iso9899:199409 341The 1990 C standard, as amended in 1994. 342 343@item iso9899:1999 344@itemx c99 345@itemx iso9899:199x 346@itemx c9x 347The revised ISO C standard, published in December 1999. Before 348publication, this was known as C9X@. 349 350@item gnu89 351The 1990 C standard plus GNU extensions. This is the default. 352 353@item gnu99 354@itemx gnu9x 355The 1999 C standard plus GNU extensions. 356 357@item c++98 358The 1998 ISO C++ standard plus amendments. 359 360@item gnu++98 361The same as @option{-std=c++98} plus GNU extensions. This is the 362default for C++ code. 363@end table 364 365@item -I- 366@opindex I- 367Split the include path. Any directories specified with @option{-I} 368options before @option{-I-} are searched only for headers requested with 369@code{@w{#include "@var{file}"}}; they are not searched for 370@code{@w{#include <@var{file}>}}. If additional directories are 371specified with @option{-I} options after the @option{-I-}, those 372directories are searched for all @samp{#include} directives. 373 374In addition, @option{-I-} inhibits the use of the directory of the current 375file directory as the first search directory for @code{@w{#include 376"@var{file}"}}. 377@ifset cppmanual 378@xref{Search Path}. 379@end ifset 380 381@item -nostdinc 382@opindex nostdinc 383Do not search the standard system directories for header files. 384Only the directories you have specified with @option{-I} options 385(and the directory of the current file, if appropriate) are searched. 386 387@item -nostdinc++ 388@opindex nostdinc++ 389Do not search for header files in the C++-specific standard directories, 390but do still search the other standard directories. (This option is 391used when building the C++ library.) 392 393@item -include @var{file} 394@opindex include 395Process @var{file} as if @code{#include "file"} appeared as the first 396line of the primary source file. However, the first directory searched 397for @var{file} is the preprocessor's working directory @emph{instead of} 398the directory containing the main source file. If not found there, it 399is searched for in the remainder of the @code{#include "@dots{}"} search 400chain as normal. 401 402If multiple @option{-include} options are given, the files are included 403in the order they appear on the command line. 404 405@item -imacros @var{file} 406@opindex imacros 407Exactly like @option{-include}, except that any output produced by 408scanning @var{file} is thrown away. Macros it defines remain defined. 409This allows you to acquire all the macros from a header without also 410processing its declarations. 411 412All files specified by @option{-imacros} are processed before all files 413specified by @option{-include}. 414 415@item -idirafter @var{dir} 416@opindex idirafter 417Search @var{dir} for header files, but do it @emph{after} all 418directories specified with @option{-I} and the standard system directories 419have been exhausted. @var{dir} is treated as a system include directory. 420 421@item -iprefix @var{prefix} 422@opindex iprefix 423Specify @var{prefix} as the prefix for subsequent @option{-iwithprefix} 424options. If the prefix represents a directory, you should include the 425final @samp{/}. 426 427@item -iwithprefix @var{dir} 428@itemx -iwithprefixbefore @var{dir} 429@opindex iwithprefix 430@opindex iwithprefixbefore 431Append @var{dir} to the prefix specified previously with 432@option{-iprefix}, and add the resulting directory to the include search 433path. @option{-iwithprefixbefore} puts it in the same place @option{-I} 434would; @option{-iwithprefix} puts it where @option{-idirafter} would. 435 436Use of these options is discouraged. 437 438@item -isystem @var{dir} 439@opindex isystem 440Search @var{dir} for header files, after all directories specified by 441@option{-I} but before the standard system directories. Mark it 442as a system directory, so that it gets the same special treatment as 443is applied to the standard system directories. 444@ifset cppmanual 445@xref{System Headers}. 446@end ifset 447 448@item -fpreprocessed 449@opindex fpreprocessed 450Indicate to the preprocessor that the input file has already been 451preprocessed. This suppresses things like macro expansion, trigraph 452conversion, escaped newline splicing, and processing of most directives. 453The preprocessor still recognizes and removes comments, so that you can 454pass a file preprocessed with @option{-C} to the compiler without 455problems. In this mode the integrated preprocessor is little more than 456a tokenizer for the front ends. 457 458@option{-fpreprocessed} is implicit if the input file has one of the 459extensions @samp{.i}, @samp{.ii} or @samp{.mi}. These are the 460extensions that GCC uses for preprocessed files created by 461@option{-save-temps}. 462 463@item -ftabstop=@var{width} 464@opindex ftabstop 465Set the distance between tab stops. This helps the preprocessor report 466correct column numbers in warnings or errors, even if tabs appear on the 467line. If the value is less than 1 or greater than 100, the option is 468ignored. The default is 8. 469 470@item -fno-show-column 471@opindex fno-show-column 472Do not print column numbers in diagnostics. This may be necessary if 473diagnostics are being scanned by a program that does not understand the 474column numbers, such as @command{dejagnu}. 475 476@item -A @var{predicate}=@var{answer} 477@opindex A 478Make an assertion with the predicate @var{predicate} and answer 479@var{answer}. This form is preferred to the older form @option{-A 480@var{predicate}(@var{answer})}, which is still supported, because 481it does not use shell special characters. 482@ifset cppmanual 483@xref{Assertions}. 484@end ifset 485 486@item -A -@var{predicate}=@var{answer} 487Cancel an assertion with the predicate @var{predicate} and answer 488@var{answer}. 489 490@item -dCHARS 491@var{CHARS} is a sequence of one or more of the following characters, 492and must not be preceded by a space. Other characters are interpreted 493by the compiler proper, or reserved for future versions of GCC, and so 494are silently ignored. If you specify characters whose behavior 495conflicts, the result is undefined. 496 497@table @samp 498@item M 499@opindex dM 500Instead of the normal output, generate a list of @samp{#define} 501directives for all the macros defined during the execution of the 502preprocessor, including predefined macros. This gives you a way of 503finding out what is predefined in your version of the preprocessor. 504Assuming you have no file @file{foo.h}, the command 505 506@example 507touch foo.h; cpp -dM foo.h 508@end example 509 510@noindent 511will show all the predefined macros. 512 513@item D 514@opindex dD 515Like @samp{M} except in two respects: it does @emph{not} include the 516predefined macros, and it outputs @emph{both} the @samp{#define} 517directives and the result of preprocessing. Both kinds of output go to 518the standard output file. 519 520@item N 521@opindex dN 522Like @samp{D}, but emit only the macro names, not their expansions. 523 524@item I 525@opindex dI 526Output @samp{#include} directives in addition to the result of 527preprocessing. 528@end table 529 530@item -P 531@opindex P 532Inhibit generation of linemarkers in the output from the preprocessor. 533This might be useful when running the preprocessor on something that is 534not C code, and will be sent to a program which might be confused by the 535linemarkers. 536@ifset cppmanual 537@xref{Preprocessor Output}. 538@end ifset 539 540@item -C 541@opindex C 542Do not discard comments. All comments are passed through to the output 543file, except for comments in processed directives, which are deleted 544along with the directive. 545 546You should be prepared for side effects when using @option{-C}; it 547causes the preprocessor to treat comments as tokens in their own right. 548For example, comments appearing at the start of what would be a 549directive line have the effect of turning that line into an ordinary 550source line, since the first token on the line is no longer a @samp{#}. 551 552@item -CC 553Do not discard comments, including during macro expansion. This is 554like @option{-C}, except that comments contained within macros are 555also passed through to the output file where the macro is expanded. 556 557In addition to the side-effects of the @option{-C} option, the 558@option{-CC} option causes all C++-style comments inside a macro 559to be converted to C-style comments. This is to prevent later use 560of that macro from inadvertently commenting out the remainder of 561the source line. 562 563The @option{-CC} option is generally used to support lint comments. 564 565@item -gcc 566@opindex gcc 567Define the macros @sc{__gnuc__}, @sc{__gnuc_minor__} and 568@sc{__gnuc_patchlevel__}. These are defined automatically when you use 569@command{gcc -E}; you can turn them off in that case with 570@option{-no-gcc}. 571 572@item -traditional-cpp 573@opindex traditional-cpp 574Try to imitate the behavior of old-fashioned C preprocessors, as 575opposed to ISO C preprocessors. 576@ifset cppmanual 577@xref{Traditional Mode}. 578@end ifset 579 580@item -trigraphs 581@opindex trigraphs 582Process trigraph sequences. 583@ifset cppmanual 584@xref{Initial processing}. 585@end ifset 586@ifclear cppmanual 587These are three-character sequences, all starting with @samp{??}, that 588are defined by ISO C to stand for single characters. For example, 589@samp{??/} stands for @samp{\}, so @samp{'??/n'} is a character 590constant for a newline. By default, GCC ignores trigraphs, but in 591standard-conforming modes it converts them. See the @option{-std} and 592@option{-ansi} options. 593 594The nine trigraphs and their replacements are 595 596@smallexample 597Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??- 598Replacement: [ ] @{ @} # \ ^ | ~ 599@end smallexample 600@end ifclear 601 602@item -remap 603@opindex remap 604Enable special code to work around file systems which only permit very 605short file names, such as MS-DOS@. 606 607@itemx --help 608@itemx --target-help 609@opindex help 610@opindex target-help 611Print text describing all the command line options instead of 612preprocessing anything. 613 614@item -v 615@opindex v 616Verbose mode. Print out GNU CPP's version number at the beginning of 617execution, and report the final form of the include path. 618 619@item -H 620@opindex H 621Print the name of each header file used, in addition to other normal 622activities. Each name is indented to show how deep in the 623@samp{#include} stack it is. 624 625@item -version 626@itemx --version 627@opindex version 628Print out GNU CPP's version number. With one dash, proceed to 629preprocess as normal. With two dashes, exit immediately. 630@end table 631