|
|
1.1 root 1: .\" Copyright (c) 1991, 1992, 1993 Free Software Foundation \-*-Text-*-
2: .\" See section COPYING for conditions for redistribution
3: .TH cpp 1 "30apr1993" "GNU Tools" "GNU Tools"
4: .SH NAME
5: cccp, cpp \- The GNU C-Compatible Compiler Preprocessor.
6: .SH SYNOPSIS
7: .hy 0
8: .na
9: .TP
10: .B cccp
11: .RB "[\|" \-$ "\|]"
12: .RB "[\|" \-A \c
13: .I predicate\c
14: .RB [ (\c
15: .I value\c
16: .BR ) ]\|]
17: .RB "[\|" \-C "\|]"
18: .RB "[\|" \-D \c
19: .I name\c
20: .RB [ =\c
21: .I definition\c
22: \&]\|]
23: .RB "[\|" \-dD "\|]"
24: .RB "[\|" \-dM "\|]"
25: .RB "[\|" "\-I\ "\c
26: .I directory\c
27: \&\|]
28: .RB "[\|" \-H "\|]"
29: .RB "[\|" \-I\- "\|]"
30: .RB "[\|" "\-imacros\ "\c
31: .I file\c
32: \&\|]
33: .RB "[\|" "\-include\ "\c
34: .I file\c
35: \&\|]
36: .RB "[\|" "\-idirafter\ "\c
37: .I dir\c
38: \&\|]
39: .RB "[\|" "\-iprefix\ "\c
40: .I prefix\c
41: \&\|]
42: .RB "[\|" "\-iwithprefix\ "\c
43: .I dir\c
44: \&\|]
45: .RB "[\|" \-lang\-c "\|]"
46: .RB "[\|" \-lang\-c++ "\|]"
47: .RB "[\|" \-lang\-objc "\|]"
48: .RB "[\|" \-lang\-objc++ "\|]"
49: .RB "[\|" \-lint "\|]"
50: .RB "[\|" \-M "\|]"
51: .RB "[\|" \-MD "\|]"
52: .RB "[\|" \-MM "\|]"
53: .RB "[\|" \-MMD "\|]"
54: .RB "[\|" \-nostdinc "\|]"
55: .RB "[\|" \-nostdinc++ "\|]"
56: .RB "[\|" \-P "\|]"
57: .RB "[\|" \-pedantic "\|]"
58: .RB "[\|" \-pedantic\-errors "\|]"
59: .RB "[\|" \-traditional "\|]"
60: .RB "[\|" \-trigraphs "\|]"
61: .RB "[\|" \-U \c
62: .I name\c
63: \&\|]
64: .RB "[\|" \-undef "\|]"
65: .RB "[\|" \-Wtrigraphs "\|]"
66: .RB "[\|" \-Wcomment "\|]"
67: .RB "[\|" \-Wall "\|]"
68: .RB "[\|" \-Wtraditional "\|]"
69: .br
70: .RB "[\|" \c
71: .I infile\c
72: .RB | \- "\|]"
73: .RB "[\|" \c
74: .I outfile\c
75: .RB | \- "\|]"
76: .ad b
77: .hy 1
78: .SH DESCRIPTION
79: The C preprocessor is a \c
80: .I macro processor\c
81: \& that is used automatically by
82: the C compiler to transform your program before actual compilation. It is
83: called a macro processor because it allows you to define \c
84: .I macros\c
85: \&,
86: which are brief abbreviations for longer constructs.
87:
88: The C preprocessor provides four separate facilities that you can use as
89: you see fit:
90: .TP
91: \(bu
92: Inclusion of header files. These are files of declarations that can be
93: substituted into your program.
94: .TP
95: \(bu
96: Macro expansion. You can define \c
97: .I macros\c
98: \&, which are abbreviations
99: for arbitrary fragments of C code, and then the C preprocessor will
100: replace the macros with their definitions throughout the program.
101: .TP
102: \(bu
103: Conditional compilation. Using special preprocessor commands, you
104: can include or exclude parts of the program according to various
105: conditions.
106: .TP
107: \(bu
108: Line control. If you use a program to combine or rearrange source files into
109: an intermediate file which is then compiled, you can use line control
110: to inform the compiler of where each source line originally came from.
111: .PP
112: C preprocessors vary in some details. For a full explanation of the
113: GNU C preprocessor, see the
114: .B info
115: file `\|\c
116: .B cpp.info\c
117: \&\|', or the manual
118: .I The C Preprocessor\c
119: \&. Both of these are built from the same documentation source file, `\|\c
120: .B cpp.texinfo\c
121: \&\|'. The GNU C
122: preprocessor provides a superset of the features of ANSI Standard C.
123:
124: ANSI Standard C requires the rejection of many harmless constructs commonly
125: used by today's C programs. Such incompatibility would be inconvenient for
126: users, so the GNU C preprocessor is configured to accept these constructs
127: by default. Strictly speaking, to get ANSI Standard C, you must use the
128: options `\|\c
129: .B \-trigraphs\c
130: \&\|', `\|\c
131: .B \-undef\c
132: \&\|' and `\|\c
133: .B \-pedantic\c
134: \&\|', but in
135: practice the consequences of having strict ANSI Standard C make it
136: undesirable to do this.
137:
138: Most often when you use the C preprocessor you will not have to invoke it
139: explicitly: the C compiler will do so automatically. However, the
140: preprocessor is sometimes useful individually.
141:
142: When you call the preprocessor individually, either name
143: (\c
144: .B cpp\c
145: \& or \c
146: .B cccp\c
147: \&) will do\(em\&they are completely synonymous.
148:
149: The C preprocessor expects two file names as arguments, \c
150: .I infile\c
151: \& and
152: \c
153: .I outfile\c
154: \&. The preprocessor reads \c
155: .I infile\c
156: \& together with any other
157: files it specifies with `\|\c
158: .B #include\c
159: \&\|'. All the output generated by the
160: combined input files is written in \c
161: .I outfile\c
162: \&.
163:
164: Either \c
165: .I infile\c
166: \& or \c
167: .I outfile\c
168: \& may be `\|\c
169: .B \-\c
170: \&\|', which as \c
171: .I infile\c
172: \&
173: means to read from standard input and as \c
174: .I outfile\c
175: \& means to write to
176: standard output. Also, if \c
177: .I outfile\c
178: \& or both file names are omitted,
179: the standard output and standard input are used for the omitted file names.
180: .SH OPTIONS
181: Here is a table of command options accepted by the C preprocessor.
182: These options can also be given when compiling a C program; they are
183: passed along automatically to the preprocessor when it is invoked by
184: the compiler.
185: .TP
186: .B \-P
187: Inhibit generation of `\|\c
188: .B #\c
189: \&\|'-lines with line-number information in
190: the output from the preprocessor. This might be
191: useful when running the preprocessor on something that is not C code
192: and will be sent to a program which might be confused by the
193: `\|\c
194: .B #\c
195: \&\|'-lines.
196: .TP
197: .B \-C
198: Do not discard comments: pass them through to the output file.
199: Comments appearing in arguments of a macro call will be copied to the
200: output before the expansion of the macro call.
201: .TP
202: .B \-traditional
203: Try to imitate the behavior of old-fashioned C, as opposed to ANSI C.
204: .TP
205: .B \-trigraphs
206: Process ANSI standard trigraph sequences. These are three-character
207: sequences, all starting with `\|\c
208: .B ??\c
209: \&\|', that are defined by ANSI C to
210: stand for single characters. For example, `\|\c
211: .B ??/\c
212: \&\|' stands for
213: `\|\c
214: .BR "\e" "\|',"
215: so `\|\c
216: .B '??/n'\c
217: \&\|' is a character constant for a newline.
218: Strictly speaking, the GNU C preprocessor does not support all
219: programs in ANSI Standard C unless `\|\c
220: .B \-trigraphs\c
221: \&\|' is used, but if
222: you ever notice the difference it will be with relief.
223:
224: You don't want to know any more about trigraphs.
225: .TP
226: .B \-pedantic
227: Issue warnings required by the ANSI C standard in certain cases such
228: as when text other than a comment follows `\|\c
229: .B #else\c
230: \&\|' or `\|\c
231: .B #endif\c
232: \&\|'.
233: .TP
234: .B \-pedantic\-errors
235: Like `\|\c
236: .B \-pedantic\c
237: \&\|', except that errors are produced rather than
238: warnings.
239: .TP
240: .B \-Wtrigraphs
241: Warn if any trigraphs are encountered (assuming they are enabled).
242: .TP
243: .B \-Wcomment
244: .TP
245: .B \-Wcomments
246: Warn whenever a comment-start sequence `\|\c
247: .B /*\c
248: \&\|' appears in a comment.
249: (Both forms have the same effect).
250: .TP
251: .B \-Wall
252: Requests both `\|\c
253: .B \-Wtrigraphs\c
254: \&\|' and `\|\c
255: .B \-Wcomment\c
256: \&\|' (but not
257: `\|\c
258: .B \-Wtraditional\c
259: \&\|').
260: .TP
261: .B \-Wtraditional
262: Warn about certain constructs that behave differently in traditional and
263: ANSI C.
264: .TP
265: .BI "\-I " directory\c
266: \&
267: Add the directory \c
268: .I directory\c
269: \& to the end of the list of
270: directories to be searched for header files.
271: This can be used to override a system header file, substituting your
272: own version, since these directories are searched before the system
273: header file directories. If you use more than one `\|\c
274: .B \-I\c
275: \&\|' option,
276: the directories are scanned in left-to-right order; the standard
277: system directories come after.
278: .TP
279: .B \-I\-
280: Any directories specified with `\|\c
281: .B \-I\c
282: \&\|' options before the `\|\c
283: .B \-I\-\c
284: \&\|'
285: option are searched only for the case of `\|\c
286: .B #include "\c
287: .I file\c
288: \&"\c
289: \&\|';
290: they are not searched for `\|\c
291: .B #include <\c
292: .I file\c
293: \&>\c
294: \&\|'.
295:
296: If additional directories are specified with `\|\c
297: .B \-I\c
298: \&\|' options after
299: the `\|\c
300: .B \-I\-\c
301: \&\|', these directories are searched for all `\|\c
302: .B #include\c
303: \&\|'
304: directives.
305:
306: In addition, the `\|\c
307: .B \-I\-\c
308: \&\|' option inhibits the use of the current
309: directory as the first search directory for `\|\c
310: .B #include "\c
311: .I file\c
312: \&"\c
313: \&\|'.
314: Therefore, the current directory is searched only if it is requested
315: explicitly with `\|\c
316: .B \-I.\c
317: \&\|'. Specifying both `\|\c
318: .B \-I\-\c
319: \&\|' and `\|\c
320: .B \-I.\c
321: \&\|'
322: allows you to control precisely which directories are searched before
323: the current one and which are searched after.
324: .TP
325: .B \-nostdinc
326: Do not search the standard system directories for header files.
327: Only the directories you have specified with `\|\c
328: .B \-I\c
329: \&\|' options
330: (and the current directory, if appropriate) are searched.
331: .TP
332: .B \-nostdinc++
333: Do not search for header files in the C++ specific standard
334: directories, but do still search the other standard directories.
335: (This option is used when building libg++.)
336: .TP
337: .BI "\-D " "name"\c
338: \&
339: Predefine \c
340: .I name\c
341: \& as a macro, with definition `\|\c
342: .B 1\c
343: \&\|'.
344: .TP
345: .BI "\-D " "name" = definition
346: \&
347: Predefine \c
348: .I name\c
349: \& as a macro, with definition \c
350: .I definition\c
351: \&.
352: There are no restrictions on the contents of \c
353: .I definition\c
354: \&, but if
355: you are invoking the preprocessor from a shell or shell-like program
356: you may need to use the shell's quoting syntax to protect characters
357: such as spaces that have a meaning in the shell syntax. If you use more than
358: one `\|\c
359: .B \-D\c
360: \&\|' for the same
361: .I name\c
362: \&, the rightmost definition takes effect.
363: .TP
364: .BI "\-U " "name"\c
365: \&
366: Do not predefine \c
367: .I name\c
368: \&. If both `\|\c
369: .B \-U\c
370: \&\|' and `\|\c
371: .B \-D\c
372: \&\|' are
373: specified for one name, the `\|\c
374: .B \-U\c
375: \&\|' beats the `\|\c
376: .B \-D\c
377: \&\|' and the name
378: is not predefined.
379: .TP
380: .B \-undef
381: Do not predefine any nonstandard macros.
382: .TP
383: .BI "\-A " "name(" value )
384: Assert (in the same way as the \c
385: .B #assert\c
386: \& command)
387: the predicate \c
388: .I name\c
389: \& with tokenlist \c
390: .I value\c
391: \&. Remember to escape or quote the parentheses on
392: shell command lines.
393:
394: You can use `\|\c
395: .B \-A-\c
396: \&\|' to disable all predefined assertions; it also
397: undefines all predefined macros.
398: .TP
399: .B \-dM
400: Instead of outputting the result of preprocessing, output a list of
401: `\|\c
402: .B #define\c
403: \&\|' commands for all the macros defined during the
404: execution of the preprocessor, including predefined macros. This gives
405: you a way of finding out what is predefined in your version of the
406: preprocessor; assuming you have no file `\|\c
407: .B foo.h\c
408: \&\|', the command
409: .sp
410: .br
411: touch\ foo.h;\ cpp\ \-dM\ foo.h
412: .br
413: .sp
414: will show the values of any predefined macros.
415: .TP
416: .B \-dD
417: Like `\|\c
418: .B \-dM\c
419: \&\|' except in two respects: it does \c
420: .I not\c
421: \& include the
422: predefined macros, and it outputs \c
423: .I both\c
424: \& the `\|\c
425: .B #define\c
426: \&\|'
427: commands and the result of preprocessing. Both kinds of output go to
428: the standard output file.
429: .PP
430: .TP
431: .B \-M
432: Instead of outputting the result of preprocessing, output a rule
433: suitable for \c
434: .B make\c
435: \& describing the dependencies of the main
436: source file. The preprocessor outputs one \c
437: .B make\c
438: \& rule containing
439: the object file name for that source file, a colon, and the names of
440: all the included files. If there are many included files then the
441: rule is split into several lines using `\|\c
442: .B \\c
443: \&\|'-newline.
444:
445: This feature is used in automatic updating of makefiles.
446: .TP
447: .B \-MM
448: Like `\|\c
449: .B \-M\c
450: \&\|' but mention only the files included with `\|\c
451: .B #include
452: "\c
453: .I file\c
454: \&"\c
455: \&\|'. System header files included with `\|\c
456: .B #include
457: <\c
458: .I file\c
459: \&>\c
460: \&\|' are omitted.
461: .TP
462: .B \-MD
463: Like `\|\c
464: .B \-M\c
465: \&\|' but the dependency information is written to files with
466: names made by replacing `\|\c
467: .B .c\c
468: \&\|' with `\|\c
469: .B .d\c
470: \&\|' at the end of the
471: input file names. This is in addition to compiling the file as
472: specified\(em\&`\|\c
473: .B \-MD\c
474: \&\|' does not inhibit ordinary compilation the way
475: `\|\c
476: .B \-M\c
477: \&\|' does.
478:
479: In Mach, you can use the utility \c
480: .B md\c
481: \& to merge the `\|\c
482: .B .d\c
483: \&\|' files
484: into a single dependency file suitable for using with the `\|\c
485: .B make\c
486: \&\|'
487: command.
488: .TP
489: .B \-MMD
490: Like `\|\c
491: .B \-MD\c
492: \&\|' except mention only user header files, not system
493: header files.
494: .TP
495: .B \-H
496: Print the name of each header file used, in addition to other normal
497: activities.
498: .TP
499: .BI "\-imacros " "file"\c
500: \&
501: Process \c
502: .I file\c
503: \& as input, discarding the resulting output, before
504: processing the regular input file. Because the output generated from
505: \c
506: .I file\c
507: \& is discarded, the only effect of `\|\c
508: .B \-imacros \c
509: .I file\c
510: \&\c
511: \&\|' is to
512: make the macros defined in \c
513: .I file\c
514: \& available for use in the main
515: input. The preprocessor evaluates any `\|\c
516: .B \-D\c
517: \&\|' and `\|\c
518: .B \-U\c
519: \&\|' options
520: on the command line before processing `\|\c
521: .B \-imacros \c
522: .I file\c
523: \&\|' \c
524: \&.
525: .TP
526: .BI "\-include " "file"
527: Process
528: .I file
529: as input, and include all the resulting output,
530: before processing the regular input file.
531: .TP
532: .BI "-idirafter " "dir"\c
533: \&
534: Add the directory \c
535: .I dir\c
536: \& to the second include path. The directories
537: on the second include path are searched when a header file is not found
538: in any of the directories in the main include path (the one that
539: `\|\c
540: .B \-I\c
541: \&\|' adds to).
542: .TP
543: .BI "-iprefix " "prefix"\c
544: \&
545: Specify \c
546: .I prefix\c
547: \& as the prefix for subsequent `\|\c
548: .B \-iwithprefix\c
549: \&\|'
550: options.
551: .TP
552: .BI "-iwithprefix " "dir"\c
553: \&
554: Add a directory to the second include path. The directory's name is
555: made by concatenating \c
556: .I prefix\c
557: \& and \c
558: .I dir\c
559: \&, where \c
560: .I prefix\c
561: \&
562: was specified previously with `\|\c
563: .B \-iprefix\c
564: \&\|'.
565: .TP
566: .B \-lang-c
567: .TP
568: .B \-lang-c++
569: .TP
570: .B \-lang-objc
571: .TP
572: .B \-lang-objc++
573: Specify the source language. `\|\c
574: .B \-lang-c++\c
575: \&\|' makes the preprocessor
576: handle C++ comment syntax, and includes extra default include
577: directories for C++, and `\|\c
578: .B \-lang-objc\c
579: \&\|' enables the Objective C
580: `\|\c
581: .B #import\c
582: \&\|' directive. `\|\c
583: .B \-lang-c\c
584: \&\|' explicitly turns off both of
585: these extensions, and `\|\c
586: .B \-lang-objc++\c
587: \&\|' enables both.
588:
589: These options are generated by the compiler driver \c
590: .B gcc\c
591: \&, but not
592: passed from the `\|\c
593: .B gcc\c
594: \&\|' command line.
595: .TP
596: .B \-lint
597: Look for commands to the program checker \c
598: .B lint\c
599: \& embedded in
600: comments, and emit them preceded by `\|\c
601: .B #pragma lint\c
602: \&\|'. For example,
603: the comment `\|\c
604: .B /* NOTREACHED */\c
605: \&\|' becomes `\|\c
606: .B #pragma lint
607: NOTREACHED\c
608: \&\|'.
609:
610: This option is available only when you call \c
611: .B cpp\c
612: \& directly;
613: \c
614: .B gcc\c
615: \& will not pass it from its command line.
616: .TP
617: .B \-$
618: Forbid the use of `\|\c
619: .B $\c
620: \&\|' in identifiers. This is required for ANSI
621: conformance. \c
622: .B gcc\c
623: \& automatically supplies this option to the
624: preprocessor if you specify `\|\c
625: .B \-ansi\c
626: \&\|', but \c
627: .B gcc\c
628: \& doesn't
629: recognize the `\|\c
630: .B \-$\c
631: \&\|' option itself\(em\&to use it without the other
632: effects of `\|\c
633: .B \-ansi\c
634: \&\|', you must call the preprocessor directly.
635: .SH "SEE ALSO"
636: .RB "`\|" Cpp "\|'"
637: entry in
638: .B info\c
639: \&;
640: .I The C Preprocessor\c
641: , Richard M. Stallman.
642: .br
643: .BR gcc "(" 1 ");"
644: .RB "`\|" Gcc "\|'"
645: entry in
646: .B info\c
647: \&;
648: .I
649: Using and Porting GNU CC (for version 2.0)\c
650: , Richard M. Stallman.
651: .SH COPYING
652: Copyright (c) 1991, 1992, 1993 Free Software Foundation, Inc.
653: .PP
654: Permission is granted to make and distribute verbatim copies of
655: this manual provided the copyright notice and this permission notice
656: are preserved on all copies.
657: .PP
658: Permission is granted to copy and distribute modified versions of this
659: manual under the conditions for verbatim copying, provided that the
660: entire resulting derived work is distributed under the terms of a
661: permission notice identical to this one.
662: .PP
663: Permission is granted to copy and distribute translations of this
664: manual into another language, under the above conditions for modified
665: versions, except that this permission notice may be included in
666: translations approved by the Free Software Foundation instead of in
667: the original English.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.