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