OSDN Git Service

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