|
|
1.1.1.3 ! root 1: .\" Copyright (c) 1991, 1992, 1993 Free Software Foundation \-*-Text-*- 1.1 root 2: .\" See section COPYING for conditions for redistribution 1.1.1.3 ! root 3: .TH cpp 1 "30apr1993" "GNU Tools" "GNU Tools" 1.1 root 4: .SH NAME 1.1.1.2 root 5: cccp, cpp \- The GNU C-Compatible Compiler Preprocessor. 1.1 root 6: .SH SYNOPSIS 7: .hy 0 8: .na 9: .TP 10: .B cccp 11: .RB "[\|" \-$ "\|]" 1.1.1.3 ! root 12: .RB "[\|" \-A \c ! 13: .I predicate\c ! 14: .RB [ (\c ! 15: .I value\c ! 16: .BR ) ]\|] 1.1 root 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: \&\|] 1.1.1.3 ! root 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: \&\|] 1.1 root 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 "\|]" 1.1.1.3 ! root 55: .RB "[\|" \-nostdinc++ "\|]" 1.1 root 56: .RB "[\|" \-P "\|]" 57: .RB "[\|" \-pedantic "\|]" 58: .RB "[\|" \-pedantic\-errors "\|]" 1.1.1.3 ! root 59: .RB "[\|" \-traditional "\|]" 1.1 root 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 1.1.1.3 ! root 202: .B \-traditional ! 203: Try to imitate the behavior of old-fashioned C, as opposed to ANSI C. ! 204: .TP 1.1 root 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 1.1.1.3 ! root 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 1.1 root 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 1.1.1.3 ! root 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 1.1 root 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 1.1.1.3 ! root 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 1.1 root 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 1.1.1.2 root 641: , Richard M. Stallman. 1.1 root 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 1.1.1.2 root 650: , Richard M. Stallman. 1.1 root 651: .SH COPYING 1.1.1.3 ! root 652: Copyright (c) 1991, 1992, 1993 Free Software Foundation, Inc. 1.1 root 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.