Annotation of gcc/cccp.1, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.