Work around MinGW mangling of "host:/path"
[msysgit/historical-msysgit.git] / mingw / man / man1 / cpp.1
blob0863924e82085263a0bff1b3983cf40bd32efd80
1 .\" Automatically generated by Pod::Man version 1.15
2 .\" Mon Sep 20 19:56:31 2004
3 .\"
4 .\" Standard preamble:
5 .\" ======================================================================
6 .de Sh \" Subsection heading
7 .br
8 .if t .Sp
9 .ne 5
10 .PP
11 \fB\\$1\fR
12 .PP
14 .de Sp \" Vertical space (when we can't use .PP)
15 .if t .sp .5v
16 .if n .sp
18 .de Ip \" List item
19 .br
20 .ie \\n(.$>=3 .ne \\$3
21 .el .ne 3
22 .IP "\\$1" \\$2
24 .de Vb \" Begin verbatim text
25 .ft CW
26 .nf
27 .ne \\$1
29 .de Ve \" End verbatim text
30 .ft R
32 .fi
34 .\" Set up some character translations and predefined strings.  \*(-- will
35 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
36 .\" double quote, and \*(R" will give a right double quote.  | will give a
37 .\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used
38 .\" to do unbreakable dashes and therefore won't be available.  \*(C` and
39 .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<>
40 .tr \(*W-|\(bv\*(Tr
41 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
42 .ie n \{\
43 .    ds -- \(*W-
44 .    ds PI pi
45 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
46 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
47 .    ds L" ""
48 .    ds R" ""
49 .    ds C` ""
50 .    ds C' ""
51 'br\}
52 .el\{\
53 .    ds -- \|\(em\|
54 .    ds PI \(*p
55 .    ds L" ``
56 .    ds R" ''
57 'br\}
58 .\"
59 .\" If the F register is turned on, we'll generate index entries on stderr
60 .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and
61 .\" index entries marked with X<> in POD.  Of course, you'll have to process
62 .\" the output yourself in some meaningful fashion.
63 .if \nF \{\
64 .    de IX
65 .    tm Index:\\$1\t\\n%\t"\\$2"
67 .    nr % 0
68 .    rr F
69 .\}
70 .\"
71 .\" For nroff, turn off justification.  Always turn off hyphenation; it
72 .\" makes way too many mistakes in technical documents.
73 .hy 0
74 .if n .na
75 .\"
76 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
77 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
78 .bd B 3
79 .    \" fudge factors for nroff and troff
80 .if n \{\
81 .    ds #H 0
82 .    ds #V .8m
83 .    ds #F .3m
84 .    ds #[ \f1
85 .    ds #] \fP
86 .\}
87 .if t \{\
88 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
89 .    ds #V .6m
90 .    ds #F 0
91 .    ds #[ \&
92 .    ds #] \&
93 .\}
94 .    \" simple accents for nroff and troff
95 .if n \{\
96 .    ds ' \&
97 .    ds ` \&
98 .    ds ^ \&
99 .    ds , \&
100 .    ds ~ ~
101 .    ds /
103 .if t \{\
104 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
105 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
106 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
107 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
108 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
109 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
111 .    \" troff and (daisy-wheel) nroff accents
112 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
113 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
114 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
115 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
116 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
117 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
118 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
119 .ds ae a\h'-(\w'a'u*4/10)'e
120 .ds Ae A\h'-(\w'A'u*4/10)'E
121 .    \" corrections for vroff
122 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
123 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
124 .    \" for low resolution devices (crt and lpr)
125 .if \n(.H>23 .if \n(.V>19 \
127 .    ds : e
128 .    ds 8 ss
129 .    ds o a
130 .    ds d- d\h'-1'\(ga
131 .    ds D- D\h'-1'\(hy
132 .    ds th \o'bp'
133 .    ds Th \o'LP'
134 .    ds ae ae
135 .    ds Ae AE
137 .rm #[ #] #H #V #F C
138 .\" ======================================================================
140 .IX Title "CPP 1"
141 .TH CPP 1 "gcc-3.4.2" "2004-09-20" "GNU"
143 .SH "NAME"
144 cpp \- The C Preprocessor
145 .SH "SYNOPSIS"
146 .IX Header "SYNOPSIS"
147 cpp [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
148     [\fB\-I\fR\fIdir\fR...] [\fB\-W\fR\fIwarn\fR...]
149     [\fB\-M\fR|\fB\-MM\fR] [\fB\-MG\fR] [\fB\-MF\fR \fIfilename\fR]
150     [\fB\-MP\fR] [\fB\-MQ\fR \fItarget\fR...]
151     [\fB\-MT\fR \fItarget\fR...]
152     [\fB\-P\fR] [\fB\-fno-working-directory\fR]
153     [\fB\-x\fR \fIlanguage\fR] [\fB\-std=\fR\fIstandard\fR]
154     \fIinfile\fR \fIoutfile\fR
156 Only the most useful options are listed here; see below for the remainder.
157 .SH "DESCRIPTION"
158 .IX Header "DESCRIPTION"
159 The C preprocessor, often known as \fIcpp\fR, is a \fImacro processor\fR
160 that is used automatically by the C compiler to transform your program
161 before compilation.  It is called a macro processor because it allows
162 you to define \fImacros\fR, which are brief abbreviations for longer
163 constructs.
165 The C preprocessor is intended to be used only with C, \*(C+, and
166 Objective-C source code.  In the past, it has been abused as a general
167 text processor.  It will choke on input which does not obey C's lexical
168 rules.  For example, apostrophes will be interpreted as the beginning of
169 character constants, and cause errors.  Also, you cannot rely on it
170 preserving characteristics of the input which are not significant to
171 C-family languages.  If a Makefile is preprocessed, all the hard tabs
172 will be removed, and the Makefile will not work.
174 Having said that, you can often get away with using cpp on things which
175 are not C.  Other Algol-ish programming languages are often safe
176 (Pascal, Ada, etc.) So is assembly, with caution.  \fB\-traditional-cpp\fR
177 mode preserves more white space, and is otherwise more permissive.  Many
178 of the problems can be avoided by writing C or \*(C+ style comments
179 instead of native language comments, and keeping macros simple.
181 Wherever possible, you should use a preprocessor geared to the language
182 you are writing in.  Modern versions of the \s-1GNU\s0 assembler have macro
183 facilities.  Most high level programming languages have their own
184 conditional compilation and inclusion mechanism.  If all else fails,
185 try a true general text processor, such as \s-1GNU\s0 M4.
187 C preprocessors vary in some details.  This manual discusses the \s-1GNU\s0 C
188 preprocessor, which provides a small superset of the features of \s-1ISO\s0
189 Standard C.  In its default mode, the \s-1GNU\s0 C preprocessor does not do a
190 few things required by the standard.  These are features which are
191 rarely, if ever, used, and may cause surprising changes to the meaning
192 of a program which does not expect them.  To get strict \s-1ISO\s0 Standard C,
193 you should use the \fB\-std=c89\fR or \fB\-std=c99\fR options, depending
194 on which version of the standard you want.  To get all the mandatory
195 diagnostics, you must also use \fB\-pedantic\fR.  
197 This manual describes the behavior of the \s-1ISO\s0 preprocessor.  To
198 minimize gratuitous differences, where the \s-1ISO\s0 preprocessor's
199 behavior does not conflict with traditional semantics, the
200 traditional preprocessor should behave the same way.  The various
201 differences that do exist are detailed in the section \fBTraditional
202 Mode\fR.
204 For clarity, unless noted otherwise, references to \fB\s-1CPP\s0\fR in this
205 manual refer to \s-1GNU\s0 \s-1CPP\s0.
206 .SH "OPTIONS"
207 .IX Header "OPTIONS"
208 The C preprocessor expects two file names as arguments, \fIinfile\fR and
209 \&\fIoutfile\fR.  The preprocessor reads \fIinfile\fR together with any
210 other files it specifies with \fB#include\fR.  All the output generated
211 by the combined input files is written in \fIoutfile\fR.
213 Either \fIinfile\fR or \fIoutfile\fR may be \fB-\fR, which as
214 \&\fIinfile\fR means to read from standard input and as \fIoutfile\fR
215 means to write to standard output.  Also, if either file is omitted, it
216 means the same as if \fB-\fR had been specified for that file.
218 Unless otherwise noted, or the option ends in \fB=\fR, all options
219 which take an argument may have that argument appear either immediately
220 after the option, or with a space between option and argument:
221 \&\fB\-Ifoo\fR and \fB\-I foo\fR have the same effect.
223 Many options have multi-letter names; therefore multiple single-letter
224 options may \fInot\fR be grouped: \fB\-dM\fR is very different from
225 \&\fB\-d\ \-M\fR.
226 .Ip "\fB\-D\fR \fIname\fR" 4
227 .IX Item "-D name"
228 Predefine \fIname\fR as a macro, with definition \f(CW\*(C`1\*(C'\fR.
229 .Ip "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
230 .IX Item "-D name=definition"
231 Predefine \fIname\fR as a macro, with definition \fIdefinition\fR.
232 The contents of \fIdefinition\fR are tokenized and processed as if
233 they appeared during translation phase three in a \fB#define\fR
234 directive.  In particular, the definition will be truncated by
235 embedded newline characters.
237 If you are invoking the preprocessor from a shell or shell-like
238 program you may need to use the shell's quoting syntax to protect
239 characters such as spaces that have a meaning in the shell syntax.
241 If you wish to define a function-like macro on the command line, write
242 its argument list with surrounding parentheses before the equals sign
243 (if any).  Parentheses are meaningful to most shells, so you will need
244 to quote the option.  With \fBsh\fR and \fBcsh\fR,
245 \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
247 \&\fB\-D\fR and \fB\-U\fR options are processed in the order they
248 are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
249 \&\fB\-include\fR \fIfile\fR options are processed after all
250 \&\fB\-D\fR and \fB\-U\fR options.
251 .Ip "\fB\-U\fR \fIname\fR" 4
252 .IX Item "-U name"
253 Cancel any previous definition of \fIname\fR, either built in or
254 provided with a \fB\-D\fR option.
255 .Ip "\fB\-undef\fR" 4
256 .IX Item "-undef"
257 Do not predefine any system-specific or GCC-specific macros.  The
258 standard predefined macros remain defined.
259 .Ip "\fB\-I\fR \fIdir\fR" 4
260 .IX Item "-I dir"
261 Add the directory \fIdir\fR to the list of directories to be searched
262 for header files.
264 Directories named by \fB\-I\fR are searched before the standard
265 system include directories.  If the directory \fIdir\fR is a standard
266 system include directory, the option is ignored to ensure that the
267 default search order for system directories and the special treatment
268 of system headers are not defeated
270 .Ip "\fB\-o\fR \fIfile\fR" 4
271 .IX Item "-o file"
272 Write output to \fIfile\fR.  This is the same as specifying \fIfile\fR
273 as the second non-option argument to \fBcpp\fR.  \fBgcc\fR has a
274 different interpretation of a second non-option argument, so you must
275 use \fB\-o\fR to specify the output file.
276 .Ip "\fB\-Wall\fR" 4
277 .IX Item "-Wall"
278 Turns on all optional warnings which are desirable for normal code.
279 At present this is \fB\-Wcomment\fR, \fB\-Wtrigraphs\fR,
280 \&\fB\-Wmultichar\fR and a warning about integer promotion causing a
281 change of sign in \f(CW\*(C`#if\*(C'\fR expressions.  Note that many of the
282 preprocessor's warnings are on by default and have no options to
283 control them.
284 .Ip "\fB\-Wcomment\fR" 4
285 .IX Item "-Wcomment"
286 .PD 0
287 .Ip "\fB\-Wcomments\fR" 4
288 .IX Item "-Wcomments"
290 Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
291 comment, or whenever a backslash-newline appears in a \fB//\fR comment.
292 (Both forms have the same effect.)
293 .Ip "\fB\-Wtrigraphs\fR" 4
294 .IX Item "-Wtrigraphs"
295 @anchor{Wtrigraphs}
296 Most trigraphs in comments cannot affect the meaning of the program.
297 However, a trigraph that would form an escaped newline (\fB??/\fR at
298 the end of a line) can, by changing where the comment begins or ends.
299 Therefore, only trigraphs that would form escaped newlines produce
300 warnings inside a comment.
302 This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
303 given, this option is still enabled unless trigraphs are enabled.  To
304 get trigraph conversion without warnings, but get the other
305 \&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno-trigraphs\fR.
306 .Ip "\fB\-Wtraditional\fR" 4
307 .IX Item "-Wtraditional"
308 Warn about certain constructs that behave differently in traditional and
309 \&\s-1ISO\s0 C.  Also warn about \s-1ISO\s0 C constructs that have no traditional C
310 equivalent, and problematic constructs which should be avoided.
311 .Ip "\fB\-Wimport\fR" 4
312 .IX Item "-Wimport"
313 Warn the first time \fB#import\fR is used.
314 .Ip "\fB\-Wundef\fR" 4
315 .IX Item "-Wundef"
316 Warn whenever an identifier which is not a macro is encountered in an
317 \&\fB#if\fR directive, outside of \fBdefined\fR.  Such identifiers are
318 replaced with zero.
319 .Ip "\fB\-Wunused-macros\fR" 4
320 .IX Item "-Wunused-macros"
321 Warn about macros defined in the main file that are unused.  A macro
322 is \fIused\fR if it is expanded or tested for existence at least once.
323 The preprocessor will also warn if the macro has not been used at the
324 time it is redefined or undefined.
326 Built-in macros, macros defined on the command line, and macros
327 defined in include files are not warned about.
329 \&\fBNote:\fR If a macro is actually used, but only used in skipped
330 conditional blocks, then \s-1CPP\s0 will report it as unused.  To avoid the
331 warning in such a case, you might improve the scope of the macro's
332 definition by, for example, moving it into the first skipped block.
333 Alternatively, you could provide a dummy use with something like:
335 .Vb 2
336 \&        #if defined the_macro_causing_the_warning
337 \&        #endif
339 .Ip "\fB\-Wendif-labels\fR" 4
340 .IX Item "-Wendif-labels"
341 Warn whenever an \fB#else\fR or an \fB#endif\fR are followed by text.
342 This usually happens in code of the form
344 .Vb 5
345 \&        #if FOO
346 \&        ...
347 \&        #else FOO
348 \&        ...
349 \&        #endif FOO
351 The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments, but often are not
352 in older programs.  This warning is on by default.
353 .Ip "\fB\-Werror\fR" 4
354 .IX Item "-Werror"
355 Make all warnings into hard errors.  Source code which triggers warnings
356 will be rejected.
357 .Ip "\fB\-Wsystem-headers\fR" 4
358 .IX Item "-Wsystem-headers"
359 Issue warnings for code in system headers.  These are normally unhelpful
360 in finding bugs in your own code, therefore suppressed.  If you are
361 responsible for the system library, you may want to see them.
362 .Ip "\fB\-w\fR" 4
363 .IX Item "-w"
364 Suppress all warnings, including those which \s-1GNU\s0 \s-1CPP\s0 issues by default.
365 .Ip "\fB\-pedantic\fR" 4
366 .IX Item "-pedantic"
367 Issue all the mandatory diagnostics listed in the C standard.  Some of
368 them are left out by default, since they trigger frequently on harmless
369 code.
370 .Ip "\fB\-pedantic-errors\fR" 4
371 .IX Item "-pedantic-errors"
372 Issue all the mandatory diagnostics, and make all mandatory diagnostics
373 into errors.  This includes mandatory diagnostics that \s-1GCC\s0 issues
374 without \fB\-pedantic\fR but treats as warnings.
375 .Ip "\fB\-M\fR" 4
376 .IX Item "-M"
377 Instead of outputting the result of preprocessing, output a rule
378 suitable for \fBmake\fR describing the dependencies of the main
379 source file.  The preprocessor outputs one \fBmake\fR rule containing
380 the object file name for that source file, a colon, and the names of all
381 the included files, including those coming from \fB\-include\fR or
382 \&\fB\-imacros\fR command line options.
384 Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
385 object file name consists of the basename of the source file with any
386 suffix replaced with object file suffix.  If there are many included
387 files then the rule is split into several lines using \fB\e\fR\-newline.
388 The rule has no commands.
390 This option does not suppress the preprocessor's debug output, such as
391 \&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
392 rules you should explicitly specify the dependency output file with
393 \&\fB\-MF\fR, or use an environment variable like
394 \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
395 will still be sent to the regular output stream as normal.
397 Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
398 warnings with an implicit \fB\-w\fR.
399 .Ip "\fB\-MM\fR" 4
400 .IX Item "-MM"
401 Like \fB\-M\fR but do not mention header files that are found in
402 system header directories, nor header files that are included,
403 directly or indirectly, from such a header.
405 This implies that the choice of angle brackets or double quotes in an
406 \&\fB#include\fR directive does not in itself determine whether that
407 header will appear in \fB\-MM\fR dependency output.  This is a
408 slight change in semantics from \s-1GCC\s0 versions 3.0 and earlier.
410 @anchor{dashMF}
411 .Ip "\fB\-MF\fR \fIfile\fR" 4
412 .IX Item "-MF file"
413 When used with \fB\-M\fR or \fB\-MM\fR, specifies a
414 file to write the dependencies to.  If no \fB\-MF\fR switch is given
415 the preprocessor sends the rules to the same place it would have sent
416 preprocessed output.
418 When used with the driver options \fB\-MD\fR or \fB\-MMD\fR,
419 \&\fB\-MF\fR overrides the default dependency output file.
420 .Ip "\fB\-MG\fR" 4
421 .IX Item "-MG"
422 In conjunction with an option such as \fB\-M\fR requesting
423 dependency generation, \fB\-MG\fR assumes missing header files are
424 generated files and adds them to the dependency list without raising
425 an error.  The dependency filename is taken directly from the
426 \&\f(CW\*(C`#include\*(C'\fR directive without prepending any path.  \fB\-MG\fR
427 also suppresses preprocessed output, as a missing header file renders
428 this useless.
430 This feature is used in automatic updating of makefiles.
431 .Ip "\fB\-MP\fR" 4
432 .IX Item "-MP"
433 This option instructs \s-1CPP\s0 to add a phony target for each dependency
434 other than the main file, causing each to depend on nothing.  These
435 dummy rules work around errors \fBmake\fR gives if you remove header
436 files without updating the \fIMakefile\fR to match.
438 This is typical output:
440 .Vb 1
441 \&        test.o: test.c test.h
443 .Vb 1
444 \&        test.h:
446 .Ip "\fB\-MT\fR \fItarget\fR" 4
447 .IX Item "-MT target"
448 Change the target of the rule emitted by dependency generation.  By
449 default \s-1CPP\s0 takes the name of the main input file, including any path,
450 deletes any file suffix such as \fB.c\fR, and appends the platform's
451 usual object suffix.  The result is the target.
453 An \fB\-MT\fR option will set the target to be exactly the string you
454 specify.  If you want multiple targets, you can specify them as a single
455 argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
457 For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
459 .Vb 1
460 \&        $(objpfx)foo.o: foo.c
462 .Ip "\fB\-MQ\fR \fItarget\fR" 4
463 .IX Item "-MQ target"
464 Same as \fB\-MT\fR, but it quotes any characters which are special to
465 Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
467 .Vb 1
468 \&        $$(objpfx)foo.o: foo.c
470 The default target is automatically quoted, as if it were given with
471 \&\fB\-MQ\fR.
472 .Ip "\fB\-MD\fR" 4
473 .IX Item "-MD"
474 \&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
475 \&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
476 whether an \fB\-o\fR option is given.  If it is, the driver uses its
477 argument but with a suffix of \fI.d\fR, otherwise it take the
478 basename of the input file and applies a \fI.d\fR suffix.
480 If \fB\-MD\fR is used in conjunction with \fB\-E\fR, any
481 \&\fB\-o\fR switch is understood to specify the dependency output file
482 (but \f(CW@pxref\fR{dashMF,,\-MF}), but if used without \fB\-E\fR, each \fB\-o\fR
483 is understood to specify a target object file.
485 Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
486 a dependency output file as a side-effect of the compilation process.
487 .Ip "\fB\-MMD\fR" 4
488 .IX Item "-MMD"
489 Like \fB\-MD\fR except mention only user header files, not system
490 \&\-header files.
491 .Ip "\fB\-x c\fR" 4
492 .IX Item "-x c"
493 .PD 0
494 .Ip "\fB\-x c++\fR" 4
495 .IX Item "-x c++"
496 .Ip "\fB\-x objective-c\fR" 4
497 .IX Item "-x objective-c"
498 .Ip "\fB\-x assembler-with-cpp\fR" 4
499 .IX Item "-x assembler-with-cpp"
501 Specify the source language: C, \*(C+, Objective-C, or assembly.  This has
502 nothing to do with standards conformance or extensions; it merely
503 selects which base syntax to expect.  If you give none of these options,
504 cpp will deduce the language from the extension of the source file:
505 \&\fB.c\fR, \fB.cc\fR, \fB.m\fR, or \fB.S\fR.  Some other common
506 extensions for \*(C+ and assembly are also recognized.  If cpp does not
507 recognize the extension, it will treat the file as C; this is the most
508 generic mode.
510 \&\fBNote:\fR Previous versions of cpp accepted a \fB\-lang\fR option
511 which selected both the language and the standards conformance level.
512 This option has been removed, because it conflicts with the \fB\-l\fR
513 option.
514 .Ip "\fB\-std=\fR\fIstandard\fR" 4
515 .IX Item "-std=standard"
516 .PD 0
517 .Ip "\fB\-ansi\fR" 4
518 .IX Item "-ansi"
520 Specify the standard to which the code should conform.  Currently \s-1CPP\s0
521 knows about C and \*(C+ standards; others may be added in the future.
523 \&\fIstandard\fR
524 may be one of:
525 .RS 4
526 .if n .Ip "\f(CW""""iso9899:1990""""\fR" 4
527 .el .Ip "\f(CWiso9899:1990\fR" 4
528 .IX Item "iso9899:1990"
529 .PD 0
530 .if n .Ip "\f(CW""""c89""""\fR" 4
531 .el .Ip "\f(CWc89\fR" 4
532 .IX Item "c89"
534 The \s-1ISO\s0 C standard from 1990.  \fBc89\fR is the customary shorthand for
535 this version of the standard.
537 The \fB\-ansi\fR option is equivalent to \fB\-std=c89\fR.
538 .if n .Ip "\f(CW""""iso9899:199409""""\fR" 4
539 .el .Ip "\f(CWiso9899:199409\fR" 4
540 .IX Item "iso9899:199409"
541 The 1990 C standard, as amended in 1994.
542 .if n .Ip "\f(CW""""iso9899:1999""""\fR" 4
543 .el .Ip "\f(CWiso9899:1999\fR" 4
544 .IX Item "iso9899:1999"
545 .PD 0
546 .if n .Ip "\f(CW""""c99""""\fR" 4
547 .el .Ip "\f(CWc99\fR" 4
548 .IX Item "c99"
549 .if n .Ip "\f(CW""""iso9899:199x""""\fR" 4
550 .el .Ip "\f(CWiso9899:199x\fR" 4
551 .IX Item "iso9899:199x"
552 .if n .Ip "\f(CW""""c9x""""\fR" 4
553 .el .Ip "\f(CWc9x\fR" 4
554 .IX Item "c9x"
556 The revised \s-1ISO\s0 C standard, published in December 1999.  Before
557 publication, this was known as C9X.
558 .if n .Ip "\f(CW""""gnu89""""\fR" 4
559 .el .Ip "\f(CWgnu89\fR" 4
560 .IX Item "gnu89"
561 The 1990 C standard plus \s-1GNU\s0 extensions.  This is the default.
562 .if n .Ip "\f(CW""""gnu99""""\fR" 4
563 .el .Ip "\f(CWgnu99\fR" 4
564 .IX Item "gnu99"
565 .PD 0
566 .if n .Ip "\f(CW""""gnu9x""""\fR" 4
567 .el .Ip "\f(CWgnu9x\fR" 4
568 .IX Item "gnu9x"
570 The 1999 C standard plus \s-1GNU\s0 extensions.
571 .if n .Ip "\f(CW""""c++98""""\fR" 4
572 .el .Ip "\f(CWc++98\fR" 4
573 .IX Item "c++98"
574 The 1998 \s-1ISO\s0 \*(C+ standard plus amendments.
575 .if n .Ip "\f(CW""""gnu++98""""\fR" 4
576 .el .Ip "\f(CWgnu++98\fR" 4
577 .IX Item "gnu++98"
578 The same as \fB\-std=c++98\fR plus \s-1GNU\s0 extensions.  This is the
579 default for \*(C+ code.
581 .RS 4
583 .Ip "\fB\-I-\fR" 4
584 .IX Item "-I-"
585 Split the include path.  Any directories specified with \fB\-I\fR
586 options before \fB\-I-\fR are searched only for headers requested with
587 \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
588 \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
589 specified with \fB\-I\fR options after the \fB\-I-\fR, those
590 directories are searched for all \fB#include\fR directives.
592 In addition, \fB\-I-\fR inhibits the use of the directory of the current
593 file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
594 .Ip "\fB\-nostdinc\fR" 4
595 .IX Item "-nostdinc"
596 Do not search the standard system directories for header files.
597 Only the directories you have specified with \fB\-I\fR options
598 (and the directory of the current file, if appropriate) are searched.
599 .Ip "\fB\-nostdinc++\fR" 4
600 .IX Item "-nostdinc++"
601 Do not search for header files in the \*(C+\-specific standard directories,
602 but do still search the other standard directories.  (This option is
603 used when building the \*(C+ library.)
604 .Ip "\fB\-include\fR \fIfile\fR" 4
605 .IX Item "-include file"
606 Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
607 line of the primary source file.  However, the first directory searched
608 for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
609 the directory containing the main source file.  If not found there, it
610 is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
611 chain as normal.
613 If multiple \fB\-include\fR options are given, the files are included
614 in the order they appear on the command line.
615 .Ip "\fB\-imacros\fR \fIfile\fR" 4
616 .IX Item "-imacros file"
617 Exactly like \fB\-include\fR, except that any output produced by
618 scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
619 This allows you to acquire all the macros from a header without also
620 processing its declarations.
622 All files specified by \fB\-imacros\fR are processed before all files
623 specified by \fB\-include\fR.
624 .Ip "\fB\-idirafter\fR \fIdir\fR" 4
625 .IX Item "-idirafter dir"
626 Search \fIdir\fR for header files, but do it \fIafter\fR all
627 directories specified with \fB\-I\fR and the standard system directories
628 have been exhausted.  \fIdir\fR is treated as a system include directory.
629 .Ip "\fB\-iprefix\fR \fIprefix\fR" 4
630 .IX Item "-iprefix prefix"
631 Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
632 options.  If the prefix represents a directory, you should include the
633 final \fB/\fR.
634 .Ip "\fB\-iwithprefix\fR \fIdir\fR" 4
635 .IX Item "-iwithprefix dir"
636 .PD 0
637 .Ip "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
638 .IX Item "-iwithprefixbefore dir"
640 Append \fIdir\fR to the prefix specified previously with
641 \&\fB\-iprefix\fR, and add the resulting directory to the include search
642 path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
643 would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
644 .Ip "\fB\-isystem\fR \fIdir\fR" 4
645 .IX Item "-isystem dir"
646 Search \fIdir\fR for header files, after all directories specified by
647 \&\fB\-I\fR but before the standard system directories.  Mark it
648 as a system directory, so that it gets the same special treatment as
649 is applied to the standard system directories.
650 .Ip "\fB\-fdollars-in-identifiers\fR" 4
651 .IX Item "-fdollars-in-identifiers"
652 @anchor{fdollars-in-identifiers}
653 Accept \fB$\fR in identifiers.
654 .Ip "\fB\-fpreprocessed\fR" 4
655 .IX Item "-fpreprocessed"
656 Indicate to the preprocessor that the input file has already been
657 preprocessed.  This suppresses things like macro expansion, trigraph
658 conversion, escaped newline splicing, and processing of most directives.
659 The preprocessor still recognizes and removes comments, so that you can
660 pass a file preprocessed with \fB\-C\fR to the compiler without
661 problems.  In this mode the integrated preprocessor is little more than
662 a tokenizer for the front ends.
664 \&\fB\-fpreprocessed\fR is implicit if the input file has one of the
665 extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
666 extensions that \s-1GCC\s0 uses for preprocessed files created by
667 \&\fB\-save-temps\fR.
668 .Ip "\fB\-ftabstop=\fR\fIwidth\fR" 4
669 .IX Item "-ftabstop=width"
670 Set the distance between tab stops.  This helps the preprocessor report
671 correct column numbers in warnings or errors, even if tabs appear on the
672 line.  If the value is less than 1 or greater than 100, the option is
673 ignored.  The default is 8.
674 .Ip "\fB\-fexec-charset=\fR\fIcharset\fR" 4
675 .IX Item "-fexec-charset=charset"
676 Set the execution character set, used for string and character
677 constants.  The default is \s-1UTF-8\s0.  \fIcharset\fR can be any encoding
678 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
679 .Ip "\fB\-fwide-exec-charset=\fR\fIcharset\fR" 4
680 .IX Item "-fwide-exec-charset=charset"
681 Set the wide execution character set, used for wide string and
682 character constants.  The default is \s-1UTF-32\s0 or \s-1UTF-16\s0, whichever
683 corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
684 \&\fB\-ftarget-charset\fR, \fIcharset\fR can be any encoding supported
685 by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
686 problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
687 .Ip "\fB\-finput-charset=\fR\fIcharset\fR" 4
688 .IX Item "-finput-charset=charset"
689 Set the input character set, used for translation from the character
690 set of the input file to the source character set used by \s-1GCC\s0. If the
691 locale does not specify, or \s-1GCC\s0 cannot get this information from the
692 locale, the default is \s-1UTF-8\s0. This can be overridden by either the locale
693 or this command line option. Currently the command line option takes
694 precedence if there's a conflict. \fIcharset\fR can be any encoding
695 supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
696 .Ip "\fB\-fworking-directory\fR" 4
697 .IX Item "-fworking-directory"
698 Enable generation of linemarkers in the preprocessor output that will
699 let the compiler know the current working directory at the time of
700 preprocessing.  When this option is enabled, the preprocessor will
701 emit, after the initial linemarker, a second linemarker with the
702 current working directory followed by two slashes.  \s-1GCC\s0 will use this
703 directory, when it's present in the preprocessed input, as the
704 directory emitted as the current working directory in some debugging
705 information formats.  This option is implicitly enabled if debugging
706 information is enabled, but this can be inhibited with the negated
707 form \fB\-fno-working-directory\fR.  If the \fB\-P\fR flag is
708 present in the command line, this option has no effect, since no
709 \&\f(CW\*(C`#line\*(C'\fR directives are emitted whatsoever.
710 .Ip "\fB\-fno-show-column\fR" 4
711 .IX Item "-fno-show-column"
712 Do not print column numbers in diagnostics.  This may be necessary if
713 diagnostics are being scanned by a program that does not understand the
714 column numbers, such as \fBdejagnu\fR.
715 .Ip "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
716 .IX Item "-A predicate=answer"
717 Make an assertion with the predicate \fIpredicate\fR and answer
718 \&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
719 \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
720 it does not use shell special characters.
721 .Ip "\fB\-A -\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
722 .IX Item "-A -predicate=answer"
723 Cancel an assertion with the predicate \fIpredicate\fR and answer
724 \&\fIanswer\fR.
725 .Ip "\fB\-dCHARS\fR" 4
726 .IX Item "-dCHARS"
727 \&\fI\s-1CHARS\s0\fR is a sequence of one or more of the following characters,
728 and must not be preceded by a space.  Other characters are interpreted
729 by the compiler proper, or reserved for future versions of \s-1GCC\s0, and so
730 are silently ignored.  If you specify characters whose behavior
731 conflicts, the result is undefined.
732 .RS 4
733 .Ip "\fBM\fR" 4
734 .IX Item "M"
735 Instead of the normal output, generate a list of \fB#define\fR
736 directives for all the macros defined during the execution of the
737 preprocessor, including predefined macros.  This gives you a way of
738 finding out what is predefined in your version of the preprocessor.
739 Assuming you have no file \fIfoo.h\fR, the command
741 .Vb 1
742 \&        touch foo.h; cpp -dM foo.h
744 will show all the predefined macros.
745 .Ip "\fBD\fR" 4
746 .IX Item "D"
747 Like \fBM\fR except in two respects: it does \fInot\fR include the
748 predefined macros, and it outputs \fIboth\fR the \fB#define\fR
749 directives and the result of preprocessing.  Both kinds of output go to
750 the standard output file.
751 .Ip "\fBN\fR" 4
752 .IX Item "N"
753 Like \fBD\fR, but emit only the macro names, not their expansions.
754 .Ip "\fBI\fR" 4
755 .IX Item "I"
756 Output \fB#include\fR directives in addition to the result of
757 preprocessing.
759 .RS 4
761 .Ip "\fB\-P\fR" 4
762 .IX Item "-P"
763 Inhibit generation of linemarkers in the output from the preprocessor.
764 This might be useful when running the preprocessor on something that is
765 not C code, and will be sent to a program which might be confused by the
766 linemarkers.
767 .Ip "\fB\-C\fR" 4
768 .IX Item "-C"
769 Do not discard comments.  All comments are passed through to the output
770 file, except for comments in processed directives, which are deleted
771 along with the directive.
773 You should be prepared for side effects when using \fB\-C\fR; it
774 causes the preprocessor to treat comments as tokens in their own right.
775 For example, comments appearing at the start of what would be a
776 directive line have the effect of turning that line into an ordinary
777 source line, since the first token on the line is no longer a \fB#\fR.
778 .Ip "\fB\-CC\fR" 4
779 .IX Item "-CC"
780 Do not discard comments, including during macro expansion.  This is
781 like \fB\-C\fR, except that comments contained within macros are
782 also passed through to the output file where the macro is expanded.
784 In addition to the side-effects of the \fB\-C\fR option, the
785 \&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
786 to be converted to C-style comments.  This is to prevent later use
787 of that macro from inadvertently commenting out the remainder of
788 the source line.
790 The \fB\-CC\fR option is generally used to support lint comments.
791 .Ip "\fB\-traditional-cpp\fR" 4
792 .IX Item "-traditional-cpp"
793 Try to imitate the behavior of old-fashioned C preprocessors, as
794 opposed to \s-1ISO\s0 C preprocessors.
795 .Ip "\fB\-trigraphs\fR" 4
796 .IX Item "-trigraphs"
797 Process trigraph sequences.
798 .Ip "\fB\-remap\fR" 4
799 .IX Item "-remap"
800 Enable special code to work around file systems which only permit very
801 short file names, such as \s-1MS-DOS\s0.
802 .Ip "\fB\*(--help\fR" 4
803 .IX Item "help"
804 .PD 0
805 .Ip "\fB\*(--target-help\fR" 4
806 .IX Item "target-help"
808 Print text describing all the command line options instead of
809 preprocessing anything.
810 .Ip "\fB\-v\fR" 4
811 .IX Item "-v"
812 Verbose mode.  Print out \s-1GNU\s0 \s-1CPP\s0's version number at the beginning of
813 execution, and report the final form of the include path.
814 .Ip "\fB\-H\fR" 4
815 .IX Item "-H"
816 Print the name of each header file used, in addition to other normal
817 activities.  Each name is indented to show how deep in the
818 \&\fB#include\fR stack it is.  Precompiled header files are also
819 printed, even if they are found to be invalid; an invalid precompiled
820 header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
821 .Ip "\fB\-version\fR" 4
822 .IX Item "-version"
823 .PD 0
824 .Ip "\fB\*(--version\fR" 4
825 .IX Item "version"
827 Print out \s-1GNU\s0 \s-1CPP\s0's version number.  With one dash, proceed to
828 preprocess as normal.  With two dashes, exit immediately.
829 .SH "ENVIRONMENT"
830 .IX Header "ENVIRONMENT"
831 This section describes the environment variables that affect how \s-1CPP\s0
832 operates.  You can use them to specify directories or prefixes to use
833 when searching for include files, or to control dependency output.
835 Note that you can also specify places to search using options such as
836 \&\fB\-I\fR, and control dependency output with options like
837 \&\fB\-M\fR.  These take precedence over
838 environment variables, which in turn take precedence over the
839 configuration of \s-1GCC\s0.
840 .Ip "\fB\s-1CPATH\s0\fR" 4
841 .IX Item "CPATH"
842 .PD 0
843 .Ip "\fBC_INCLUDE_PATH\fR" 4
844 .IX Item "C_INCLUDE_PATH"
845 .Ip "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
846 .IX Item "CPLUS_INCLUDE_PATH"
847 .Ip "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
848 .IX Item "OBJC_INCLUDE_PATH"
850 Each variable's value is a list of directories separated by a special
851 character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
852 The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
853 determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
854 semicolon, and for almost all other targets it is a colon.
856 \&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
857 specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
858 options on the command line.  This environment variable is used
859 regardless of which language is being preprocessed.
861 The remaining environment variables apply only when preprocessing the
862 particular language indicated.  Each specifies a list of directories
863 to be searched as if specified with \fB\-isystem\fR, but after any
864 paths given with \fB\-isystem\fR options on the command line.
866 In all these variables, an empty element instructs the compiler to
867 search its current working directory.  Empty elements can appear at the
868 beginning or end of a path.  For instance, if the value of
869 \&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
870 effect as \fB\-I.\ \-I/special/include\fR.
871 .Ip "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
872 .IX Item "DEPENDENCIES_OUTPUT"
873 If this variable is set, its value specifies how to output
874 dependencies for Make based on the non-system header files processed
875 by the compiler.  System header files are ignored in the dependency
876 output.
878 The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
879 which case the Make rules are written to that file, guessing the target
880 name from the source file name.  Or the value can have the form
881 \&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
882 file \fIfile\fR using \fItarget\fR as the target name.
884 In other words, this environment variable is equivalent to combining
885 the options \fB\-MM\fR and \fB\-MF\fR,
886 with an optional \fB\-MT\fR switch too.
887 .Ip "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
888 .IX Item "SUNPRO_DEPENDENCIES"
889 This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
890 except that system header files are not ignored, so it implies
891 \&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
892 main input file is omitted.
893 .SH "SEE ALSO"
894 .IX Header "SEE ALSO"
895 \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf-funding\fR\|(7),
896 \&\fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), and the Info entries for \fIcpp\fR, \fIgcc\fR, and
897 \&\fIbinutils\fR.
898 .SH "COPYRIGHT"
899 .IX Header "COPYRIGHT"
900 Copyright (c) 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996,
901 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
902 Free Software Foundation, Inc.
904 Permission is granted to copy, distribute and/or modify this document
905 under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or
906 any later version published by the Free Software Foundation.  A copy of
907 the license is included in the
908 man page \fIgfdl\fR\|(7).
909 This manual contains no Invariant Sections.  The Front-Cover Texts are
910 (a) (see below), and the Back-Cover Texts are (b) (see below).
912 (a) The \s-1FSF\s0's Front-Cover Text is:
914 .Vb 1
915 \&     A GNU Manual
917 (b) The \s-1FSF\s0's Back-Cover Text is:
919 .Vb 3
920 \&     You have freedom to copy and modify this GNU Manual, like GNU
921 \&     software.  Copies published by the Free Software Foundation raise
922 \&     funds for GNU development.