Annotation of gcc/cpp-2, revision 1.1

1.1     ! root        1: 
        !             2: 
        !             3: File: cpp,  Node: Argument Prescan,  Next: Cascaded Macros,  Prev: Self-Reference,  Up: Macro Pitfalls
        !             4: 
        !             5: Separate Expansion of Macro Arguments
        !             6: .....................................
        !             7: 
        !             8:  We have explained that the expansion of a macro, including the substituted
        !             9: actual arguments, is scanned over again for macro calls to be expanded.
        !            10: 
        !            11: What really happens is more subtle: first each actual argument text is
        !            12: scanned separately for macro calls.  Then the results of this are
        !            13: substituted into the macro body to produce the macro expansion, and the
        !            14: macro expansion is scanned again for macros to expand.
        !            15: 
        !            16: The result is that the actual arguments are scanned *twice* to expand macro
        !            17: calls in them.
        !            18: 
        !            19: Most of the time, this has no effect.  If the actual argument contained any
        !            20: macro calls, they are expanded during the first scan.  The result therefore
        !            21: contains no macro calls, so the second scan does not change it.  If the
        !            22: actual argument were substituted as given, with no prescan, the single
        !            23: remaining scan would find the same macro calls and produce the same results.
        !            24: 
        !            25: You might expect the double scan to change the results when a
        !            26: self-referential macro is used in an actual argument of another macro
        !            27: (*Note Self-Reference::.): the self-referential macro would be expanded
        !            28: once in the first scan, and a second time in the second scan.  But this is
        !            29: not what happens.  The self-references that do not expand in the first scan
        !            30: are marked so that they will not expand in the second scan either.
        !            31: 
        !            32: The prescan is not done when an argument is stringified or concatenated. 
        !            33: (More precisely, stringification and concatenation use the argument as
        !            34: written, in un-prescanned form.  The same actual argument would be used in
        !            35: prescanned form if it is substituted elsewhere without stringification or
        !            36: concatenation.)  Thus,
        !            37: 
        !            38:      #define str(s) #s
        !            39:      #define foo 4
        !            40:      str (foo)
        !            41: 
        !            42: expands to `"foo"'.  Once more, prescan has been prevented from having any
        !            43: noticeable effect.
        !            44: 
        !            45: You might now ask, ``Why mention the prescan, if it makes no difference? 
        !            46: Why not skip it and make the preprocessor faster?''  The answer is that the
        !            47: prescan does make a difference in two special cases:
        !            48: 
        !            49:    * Nested calls to a macro.
        !            50: 
        !            51:    * Macros that call other macros that stringify or concatenate.
        !            52: 
        !            53: We say that "nested" calls to a macro occur when a macro's actual argument
        !            54: contains a call to that very macro.  For example, if `f' is a macro that
        !            55: expects one argument, `f (f (1))' is a nested pair of calls to `f'.  The
        !            56: desired expansion is made by expanding `f (1)' and substituting that into
        !            57: the definition of `f'.  The prescan causes the expected result to happen. 
        !            58: Without the prescan, `f (1)' itself would be substituted as an actual
        !            59: argument, and the inner use of `f' would appear during the main scan as an
        !            60: indirect self-reference and would not be expanded.  Here, the prescan
        !            61: cancels an undesirable side effect (in the medical, not computational,
        !            62: sense of the term) of the special rule for self-referential macros.
        !            63: 
        !            64: There is also one case where prescan is useful.  It is possible to use
        !            65: prescan to expand an argument and then stringify it---if you use two levels
        !            66: of macros.  Let's add a new macro `xstr' to the example shown above:
        !            67: 
        !            68:      #define xstr(s) str(s)
        !            69:      #define str(s) #s
        !            70:      #define foo 4
        !            71:      xstr (foo)
        !            72: 
        !            73: This expands into `"4"', not `"foo"'.  The reason for the difference is
        !            74: that the argument of `xstr' is expanded at prescan (because `xstr' does not
        !            75: specify stringification or concatenation of the argument).  The result of
        !            76: prescan then forms the actual argument for `str'.  `str' uses its argument
        !            77: without prescan because it performs strigification; but it cannot prevent
        !            78: or undo the prescanning already done by `xstr'.
        !            79: 
        !            80: 
        !            81: File: cpp,  Node: Cascaded Macros,  Prev: Argument Prescan,  Up: Macro Pitfalls
        !            82: 
        !            83: Cascaded Use of Macros
        !            84: ......................
        !            85: 
        !            86:  A "cascade" of macros is when one macro's body contains a reference to
        !            87: another macro.  This is very common practice.  For example,
        !            88: 
        !            89:      #define BUFSIZE 1020
        !            90:      #define TABLESIZE BUFSIZE
        !            91: 
        !            92: This is not at all the same as defining `TABLESIZE' to be `1020'.  The
        !            93: `#define' for `TABLESIZE' uses exactly the body you specify---in this case,
        !            94: `BUFSIZE'---and does not check to see whether it too is the name of a macro.
        !            95: 
        !            96: It's only when you *use* `TABLESIZE' that the result of its expansion is
        !            97: checked for more macro names.
        !            98: 
        !            99: This makes a difference if you change the definition of `BUFSIZE' at some
        !           100: point in the source file.  `TABLESIZE', defined as shown, will always
        !           101: expand using the definition of `BUFSIZE' that is currently in effect:
        !           102: 
        !           103:      #define BUFSIZE 1020
        !           104:      #define TABLESIZE BUFSIZE
        !           105:      #undef BUFSIZE
        !           106:      #define BUFSIZE 37
        !           107: 
        !           108: Now `TABLESIZE' expands (in two stages) to `37'.
        !           109: 
        !           110: 
        !           111: File: cpp,  Node: Conditionals,  Next: Combining Sources,  Prev: Macros,  Up: Top
        !           112: 
        !           113: Conditionals
        !           114: ============
        !           115: 
        !           116: In a macro processor, a "conditional" is a command that allows a part of
        !           117: the program to be ignored during compilation, on some conditions.  In the C
        !           118: preprocessor, a conditional can test either an arithmetic expression or
        !           119: whether a name is defined as a macro.
        !           120: 
        !           121: A conditional in the C preprocessor resembles in some ways an `if'
        !           122: statement in C, but it is important to understand the difference between
        !           123: them.  The condition in an `if' statement is tested during the execution of
        !           124: your program.  Its purpose is to allow your program to behave differently
        !           125: from run to run, depending on the data it is operating on.  The condition
        !           126: in a preprocessor conditional command is tested when your program is
        !           127: compiled.  Its purpose is to allow different code to be included in the
        !           128: program depending on the situation at the time of compilation.
        !           129: 
        !           130: * Menu:
        !           131: 
        !           132: * Uses: Conditional Uses.       What conditionals are for.
        !           133: * Syntax: Conditional Syntax.   How conditionals are written.
        !           134: * Deletion: Deleted Code.       Making code into a comment.
        !           135: * Macros: Conditionals-Macros.  Why conditionals are used with macros.
        !           136: * Errors: #error Command.       Detecting inconsistent compilation parameters.
        !           137: 
        !           138: 
        !           139: 
        !           140: File: cpp,  Node: Conditional Uses,  Next: Conditional Syntax,  Prev: Conditionals,  Up: Conditionals
        !           141: 
        !           142: Generally there are three kinds of reason to use a conditional.
        !           143: 
        !           144:    * A program may need to use different code depending on the machine or
        !           145:      operating system it is to run on.  In some cases the code for one
        !           146:      operating system may be erroneous on another operating system; for
        !           147:      example, it might refer to library routines that do not exist on the
        !           148:      other system.  When this happens, it is not enough to avoid executing
        !           149:      the invalid code: merely having it in the program makes it impossible
        !           150:      to link the program and run it.  With a preprocessor conditional, the
        !           151:      offending code can be effectively excised from the program when it is
        !           152:      not valid.
        !           153: 
        !           154:    * You may want to be able to compile the same source file into two
        !           155:      different programs.  Sometimes the difference between the programs is
        !           156:      that one makes frequent time-consuming consistency checks on its
        !           157:      intermediate data while the other does not.
        !           158: 
        !           159:    * A conditional whose condition is always false is a good way to exclude
        !           160:      code from the program but keep it as a sort of comment for future
        !           161:      reference.
        !           162: 
        !           163: Most simple programs that are intended to run on only one machine will not
        !           164: need to use preprocessor conditionals.
        !           165: 
        !           166: 
        !           167: File: cpp,  Node: Conditional Syntax,  Next: Conditionals-Macros,  Prev: Conditional Uses,  Up: Conditionals
        !           168: 
        !           169: Syntax of Conditionals
        !           170: ----------------------
        !           171: 
        !           172: A conditional in the C preprocessor begins with a "conditional command":
        !           173: `#if', `#ifdef' or `#ifndef'.*note Conditionals::, for info on `#ifdef' and
        !           174: `#ifndef'; only `#if' is explained here.
        !           175: 
        !           176: * Menu:
        !           177: 
        !           178: * If: #if Command.     Basic conditionals using `#if' and `#endif'.
        !           179: * Else: #else Command. Including some text if the condition fails.
        !           180: * Elif: #elif Command. Testing several alternative possibilities.
        !           181: 
        !           182: 
        !           183: 
        !           184: File: cpp,  Node: #if Command,  Next: #else Command,  Prev: Conditional Syntax,  Up: Conditional Syntax
        !           185: 
        !           186: The `#if' Command
        !           187: .................
        !           188: 
        !           189:  The `#if' command in its simplest form consists of
        !           190: 
        !           191:      #if EXPRESSION
        !           192:      CONTROLLED TEXT
        !           193:      #endif /* EXPRESSION */
        !           194: 
        !           195: The comment following the `#endif' is not required, but it is a good
        !           196: practice because it helps people match the `#endif' to the corresponding
        !           197: `#if'.  Such comments should always be used, except in short conditionals
        !           198: that are not nested.  In fact, you can put anything at all after the
        !           199: `#endif' and it will be ignored by the GNU C preprocessor, but only
        !           200: comments are acceptable in ANSI Standard C.
        !           201: 
        !           202: EXPRESSION is a C expression of integer type, subject to stringent
        !           203: restrictions.  It may contain
        !           204: 
        !           205:    * Integer constants, which are all regarded as `long' or `unsigned long'.
        !           206: 
        !           207:    * Character constants, which are interpreted according to the character
        !           208:      set and conventions of the machine and operating system on which the
        !           209:      preprocessor is running.  The GNU C preprocessor uses the C data type
        !           210:      `char' for these character constants; therefore, whether some
        !           211:      character codes are negative is determined by the C compiler used to
        !           212:      compile the preprocessor.  If it treats `char' as signed, then
        !           213:      character codes large enough to set the sign bit will be considered
        !           214:      negative; otherwise, no character code is considered negative.
        !           215: 
        !           216:    * Arithmetic operators for addition, subtraction, multiplication,
        !           217:      division, bitwise operations, shifts, comparisons, and `&&' and `||'.
        !           218: 
        !           219:    * Identifiers that are not macros, which are all treated as zero(!).
        !           220: 
        !           221:    * Macro calls.  All macro calls in the expression are expanded before
        !           222:      actual computation of the expression's value begins.
        !           223: 
        !           224: Note that `sizeof' operators and `enum'-type values are not allowed. 
        !           225: `enum'-type values, like all other identifiers that are not taken as macro
        !           226: calls and expanded, are treated as zero.
        !           227: 
        !           228: The text inside of a conditional can include preprocessor commands.  Then
        !           229: the commands inside the conditional are obeyed only if that branch of the
        !           230: conditional succeeds.  The text can also contain other conditional groups. 
        !           231: However, the `#if''s and `#endif''s must balance.
        !           232: 
        !           233: 
        !           234: File: cpp,  Node: #else Command,  Next: #elif Command,  Prev: #if Command,  Up: Conditional Syntax
        !           235: 
        !           236: The `#else' Command
        !           237: ...................
        !           238: 
        !           239:  The `#else' command can be added a conditional to provide alternative text
        !           240: to be used if the condition is false.  This looks like
        !           241: 
        !           242:      #if EXPRESSION
        !           243:      TEXT-IF-TRUE
        !           244:      #else /* Not EXPRESSION */
        !           245:      TEXT-IF-FALSE
        !           246:      #endif /* Not EXPRESSION */
        !           247: 
        !           248: If EXPRESSION is nonzero, and the TEXT-IF-TRUE is considered included, then
        !           249: `#else' acts like a failing conditional and the TEXT-IF-FALSE is ignored. 
        !           250: Contrariwise, if the `#if' conditional fails, the TEXT-IF-FALSE is
        !           251: considered included.
        !           252: 
        !           253: 
        !           254: File: cpp,  Node: #elif Command,  Prev: #else Command,  Up: Conditional Syntax
        !           255: 
        !           256: The `#elif' Command
        !           257: ...................
        !           258: 
        !           259:  One common case of nested conditionals is used to check for more than two
        !           260: possible alternatives.  For example, you might have
        !           261: 
        !           262:      #if X == 1
        !           263:      ...
        !           264:      #else /* X != 1 */
        !           265:      #if X == 2
        !           266:      ...
        !           267:      #else /* X != 2 */
        !           268:      ...
        !           269:      #endif /* X != 2 */
        !           270:      #endif /* X != 1 */
        !           271: 
        !           272: Another conditional command, `#elif', allows this to be abbreviated as
        !           273: follows:
        !           274: 
        !           275:      #if X == 1
        !           276:      ...
        !           277:      #elif X == 2
        !           278:      ...
        !           279:      #else /* X != 2 and X != 1*/
        !           280:      ...
        !           281:      #endif /* X != 2 and X != 1*/
        !           282: 
        !           283: `#elif' stands for ``else if''.  Like `#else', it goes in the middle of a
        !           284: `#if'-`#endif' pair and subdivides it; it does not require a matching
        !           285: `#endif' of its own.  Like `#if', the `#elif' command includes an
        !           286: expression to be tested.
        !           287: 
        !           288: The text following the `#elif' is processed only if the original
        !           289: `#if'-condition failed and the `#elif' condition succeeeds.  More than one
        !           290: `#elif' can go in the same `#if'-`#endif' group.  Then the text after each
        !           291: `#elif' is processed only if the `#elif' condition succeeds after the
        !           292: original `#if' and any previous `#elif''s within it have failed.  `#else'
        !           293: is equivalent to `#elif 1', and `#else' is allowed after any number of
        !           294: `#elif''s, but `#elif' may not follow a `#else'.
        !           295: 
        !           296: 
        !           297: File: cpp,  Node: Deleted Code,  Next: Conditionals-Macros,  Prev: Conditional Syntax,  Up: Conditionals
        !           298: 
        !           299: Keeping Deleted Code for Future Reference
        !           300: -----------------------------------------
        !           301: 
        !           302: If you replace or delete a part of the program but want to keep the old
        !           303: code around as a comment for future reference, the easy way to do this is
        !           304: to put `#if 0' before it and `#endif' after it.
        !           305: 
        !           306: This works even if the code being turned off contains conditionals, but
        !           307: they must be entire conditionals (balanced `#if' and `#endif').
        !           308: 
        !           309: 
        !           310: File: cpp,  Node: Conditionals-Macros,  Next: #error Command,  Prev: Deleted Code,  Up: Conditionals
        !           311: 
        !           312: Conditionals and Macros
        !           313: -----------------------
        !           314: 
        !           315: Conditionals are rarely useful except in connection with macros.  A `#if'
        !           316: command whose expression uses no macros is equivalent to `#if 1' or `#if
        !           317: 0'; you might as well determine which one, by computing the value of the
        !           318: expression yourself, and then simplify the program.  But when the
        !           319: expression uses macros, its value can vary from compilation to compilation.
        !           320: 
        !           321: For example, here is a conditional that tests the expression `BUFSIZE ==
        !           322: 1020', where `BUFSIZE' must be a macro.
        !           323: 
        !           324:      #if BUFSIZE == 1020
        !           325:        printf ("Large buffers!\n");
        !           326:      #endif /* BUFSIZE is large */
        !           327: 
        !           328: The special operator `defined' may be used in `#if' expressions to test
        !           329: whether a certain name is defined as a macro.  Either `defined NAME' or
        !           330: `defined (NAME)' is an expression whose value is 1 if NAME is defined as
        !           331: macro at the current point in the program, and 0 otherwise.  For the
        !           332: `defined' operator it makes no difference what the definition of the macro
        !           333: is; all that matters is whether there is a definition.  Thus, for example,
        !           334: 
        !           335:      #if defined (vax) || defined (ns16000)
        !           336: 
        !           337: would include the following code if either of the names `vax' and `ns16000'
        !           338: is defined as a macro.
        !           339: 
        !           340: If a macro is defined and later undefined with `#undef', subsequent use of
        !           341: the `defined' operator will return 0, because the name is no longer
        !           342: defined.  If the macro is defined again with another `#define', `defined'
        !           343: will recommence returning 1.
        !           344: 
        !           345: Conditionals that test just the definedness of one name are very common, so
        !           346: there are two special short conditional commands for this case.  They are
        !           347: 
        !           348: `#ifdef NAME'
        !           349:      is equivalent to `#if defined (NAME)'.
        !           350: 
        !           351: `#ifndef NAME'
        !           352:      is equivalent to `#if ! defined (NAME)'.
        !           353: 
        !           354: Macro definitions can vary between compilations for several reasons.
        !           355: 
        !           356:    * Some macros are predefined on each kind of machine.  For example, on a
        !           357:      Vax, the name `vax' is a predefined macro.  On other machines, it
        !           358:      would not be defined.
        !           359: 
        !           360:    * Many more macros are defined by system header files.  Different
        !           361:      systems and machines define different macros, or give them different
        !           362:      values.  It is useful to test these macros with conditionals to avoid
        !           363:      using a system feature on a machine where it is not implemented.
        !           364: 
        !           365:    * Macros are a common way of allowing users to customize a program for
        !           366:      different machines or applications.  For example, the macro `BUFSIZE'
        !           367:      might be defined in a configuration file for your program that is
        !           368:      included as a header file in each source file.  You would use
        !           369:      `BUFSIZE' in a preprocessor conditional in order to generate different
        !           370:      code depending on the chosen configuration.
        !           371: 
        !           372:    * Macros can be defined or undefined with `-D' and `-U' command options
        !           373:      when you compile the program.  You can arrange to compile the same
        !           374:      source file into two different programs by choosing a macro name to
        !           375:      specify which program you want, writing conditionals to test whether
        !           376:      or how this macro is defined, and then controlling the state of the
        !           377:      macro with compiler command options.  *note Invocation::.
        !           378: 
        !           379: 
        !           380: File: cpp,  Node: #error Command,  Prev: Conditionals-Macros,  Up: Conditionals
        !           381: 
        !           382: The `#error' Command
        !           383: --------------------
        !           384: 
        !           385: The command `#error' causes the preprocessor to report a fatal error.  The
        !           386: rest of the line that follows `#error' is used as the error message.
        !           387: 
        !           388: You would use `#error' inside of a conditional that detects a combination
        !           389: of parameters which you know the program does not properly support.  For
        !           390: example, if you know that the program will not run properly on a Vax, you
        !           391: might write
        !           392: 
        !           393:      #ifdef vax
        !           394:      #error Won't work on Vaxen.  See comments at get_last_object.
        !           395:      #endif
        !           396: 
        !           397: *note Nonstandard Predefined::, for why this works.
        !           398: 
        !           399: If you have several configuration parameters that must be set up by the
        !           400: installation in a consistent way, you can use conditionals to detect an
        !           401: inconsistency and report it with `#error'.  For example,
        !           402: 
        !           403:      #if HASH_TABLE_SIZE % 2 == 0 || HASH_TABLE_SIZE % 3 == 0 \
        !           404:          || HASH_TABLE_SIZE % 5 == 0
        !           405:      #error HASH_TABLE_SIZE should not be divisible by a small prime
        !           406:      #endif
        !           407: 
        !           408: 
        !           409: File: cpp,  Node: Combining Sources,  Next: Other Commands,  Prev: Conditionals,  Up: Top
        !           410: 
        !           411: Combining Source Files
        !           412: ======================
        !           413: 
        !           414: One of the jobs of the C preprocessor is to inform the C compiler of where
        !           415: each line of C code came from: which source file and which line number.
        !           416: 
        !           417: C code can come from multiple source files if you use `#include'; both
        !           418: `#include' and the use of conditionals and macros can cause the line number
        !           419: of a line in the preprocessor output to be different from the line's number
        !           420: in the original source file.  You will appreciate the value of making both
        !           421: the C compiler (in error messages) and symbolic debuggers such as GDB use
        !           422: the line numbers in your source file.
        !           423: 
        !           424: The C preprocessor builds on this feature by offering a command by which
        !           425: you can control the feature explicitly.  This is useful when a file for
        !           426: input to the C preprocessor is the output from another program such as the
        !           427: `bison' parser generator, which operates on another file that is the true
        !           428: source file.  Parts of the output from `bison' are generated from scratch,
        !           429: other parts come from a standard parser file.  The rest are copied nearly
        !           430: verbatim from the source file, but their line numbers in the `bison' output
        !           431: are not the same as their original line numbers.  Naturally you would like
        !           432: compiler error messages and symbolic debuggers to know the original source
        !           433: file and line number of each line in the `bison' output.
        !           434: 
        !           435: `bison' arranges this by writing `#line' commands into the output file. 
        !           436: `#line' is a command that specifies the original line number and source
        !           437: file name for subsequent input in the current preprocessor input file. 
        !           438: `#line' has three variants:
        !           439: 
        !           440: `#line LINENUM'
        !           441:      Here LINENUM is a decimal integer constant.  This specifies that the
        !           442:      line number of the following line of input, in its original source
        !           443:      file, was LINENUM.
        !           444: 
        !           445: `#line LINENUM FILENAME'
        !           446:      Here LINENUM is a decimal integer constant and FILENAME is a string
        !           447:      constant.  This specifies that the following line of input came
        !           448:      originally from source file FILENAME and its line number there was
        !           449:      LINENUM.  Keep in mind that FILENAME is not just a file name; it is
        !           450:      surrounded by doublequote characters so that it looks like a string
        !           451:      constant.
        !           452: 
        !           453: `#line ANYTHING ELSE'
        !           454:      ANYTHING ELSE is checked for macro calls, which are expanded.  The
        !           455:      result should be a decimal integer constant followed optionally by a
        !           456:      string constant, as described above.
        !           457: 
        !           458: `#line' commands alter the results of the `__FILE__' and `__LINE__'
        !           459: predefined macros from that point on.  *note Standard Predefined::.
        !           460: 
        !           461: 
        !           462: File: cpp,  Node: Other Commands,  Next: Output,  Prev: Combining Sources,  Up: Top
        !           463: 
        !           464: Miscellaneous Preprocessor Commands
        !           465: ===================================
        !           466: 
        !           467: This section describes two additional preprocesor commands.  They are not
        !           468: very useful, but are mentioned for completeness.
        !           469: 
        !           470: The "null command" consists of a `#' followed by a Newline, with only
        !           471: whitespace (including comments) in between.  A null command is understood
        !           472: as a preprocessor command but has no effect on the preprocessor output. 
        !           473: The primary significance of the existence of the null command is that an
        !           474: input line consisting of just a `#' will produce no output, rather than a
        !           475: line of output containing just a `#'.  Supposedly some old C programs
        !           476: contain such lines.
        !           477: 
        !           478: The `#pragma' command is specified in the ANSI standard to have an
        !           479: arbitrary implementation-defined effect.  In the GNU C preprocessor,
        !           480: `#pragma' first attempts to run the game `rogue'; if that fails, it tries
        !           481: to run the game `hack'; if that fails, it tries to run GNU Emacs displaying
        !           482: the Tower of Hanoi; if that fails, it reports a fatal error.  In any case,
        !           483: preprocessing does not continue.
        !           484: 
        !           485: 
        !           486: File: cpp,  Node: Output,  Next: Invocation,  Prev: Other Commands,  Up: Top
        !           487: 
        !           488: C Preprocessor Output
        !           489: =====================
        !           490: 
        !           491: The output from the C preprocessor looks much like the input, except that
        !           492: all preprocessor command lines have been replaced with blank lines and all
        !           493: comments with spaces.  Whitespace within a line is not altered; however, a
        !           494: space is inserted after the expansions of most macro calls.
        !           495: 
        !           496: Source file name and line number information is conveyed by lines of the form
        !           497: 
        !           498:      # LINENUM FILENAME
        !           499: 
        !           500: which are inserted as needed into the middle of the input (but never within
        !           501: a string or character constant).  Such a line means that the following line
        !           502: originated in file FILENAME at line LINENUM.
        !           503: 
        !           504: 
        !           505: File: cpp,  Node: Invocation,  Prev: Output,  Up: Top
        !           506: 
        !           507: Invoking the C Preprocessor
        !           508: ===========================
        !           509: 
        !           510: Most often when you use the C preprocessor you will not have to invoke it
        !           511: explicitly: the C compiler will do so automatically.  However, the
        !           512: preprocessor is sometimes useful individually.
        !           513: 
        !           514: The C preprocessor expects two file names as arguments, INFILE and OUTFILE.
        !           515:  The preprocessor reads INFILE together with any other files it specifies
        !           516: with `#include'.  All the output generated by the combined input files is
        !           517: written in OUTFILE.
        !           518: 
        !           519: Either INFILE or OUTFILE may be `-', which as INFILE means to read from
        !           520: standard input and as OUTFILE means to write to standard output.  Also, if
        !           521: OUTFILE or both file names are omitted, the standard output and standard
        !           522: input are used for the omitted file names.
        !           523: 
        !           524: Here is a table of command options accepted by the C preprocessor.  Most of
        !           525: them can also be given when compiling a C program; they are passed along
        !           526: automatically to the preprocessor when it is invoked by the compiler.
        !           527: 
        !           528: `-P'
        !           529:      Inhibit generation of `#'-lines with line-number information in the
        !           530:      output from the preprocessor (*Note Output::.).  This might be useful
        !           531:      when running the preprocessor on something that is not C code and will
        !           532:      be sent to a program which might be confused by the `#'-lines
        !           533: 
        !           534: `-C'
        !           535:      Do not discard comments: pass them through to the output file. 
        !           536:      Comments appearing in arguments of a macro call will be copied to the
        !           537:      output before the expansion of the macro call.
        !           538: 
        !           539: `-T'
        !           540:      Process ANSI standard trigraph sequences.  These are three-character
        !           541:      sequences, all starting with `??', that are defined by ANSI C to stand
        !           542:      for single characters.  For example, `??/' stands for `\', so `'??/n''
        !           543:      is a character constant for Newline.  Strictly speaking, the GNU C
        !           544:      preprocessor does not support all programs in ANSI Standard C unless
        !           545:      `-T' is used, but if you ever notice the difference it will be with
        !           546:      relief.
        !           547: 
        !           548:      You don't want to know any more about trigraphs.
        !           549: 
        !           550: `-pedantic'
        !           551:      Issue warnings required by the ANSI C standard in certain cases such
        !           552:      as when text other than a comment follows `#else' or `#endif'.
        !           553: 
        !           554: `-I DIRECTORY'
        !           555:      Add the directory DIRECTORY to the end of the list of directories to
        !           556:      be searched for header files (*Note Include Syntax::.).  This can be
        !           557:      used to override a system header file, substituting your own version,
        !           558:      since these directories are searched before the system header file
        !           559:      directories.  If you use more than one `-I' option, the directories
        !           560:      are scanned in left-to-right order; the standard system directories
        !           561:      come after.
        !           562: 
        !           563: `-I-'
        !           564:      Any directories specified with `-I' options before the `-I-' option
        !           565:      are searched only for the case of `#include "FILE"'; they are not
        !           566:      searched for `#include <FILE>'.
        !           567: 
        !           568:      If additional directories are specified with `-I' options after the
        !           569:      `-I-', these directories are searched for all `#include' directives.
        !           570: 
        !           571:      In addition, the `-I-' option inhibits the use of the current
        !           572:      directory as the first search directory for `#include "FILE"'. 
        !           573:      Therefore, the current directory is searched only if it is requested
        !           574:      explicitly with `-I.'.  Specifying both `-I-' and `-I.' allows you to
        !           575:      control precisely which directories are searched before the current
        !           576:      one and which are searched after.
        !           577: 
        !           578: `-nostdinc'
        !           579:      Do not search the standard system directories for header files.  Only
        !           580:      the directories you have specified with `-I' options (and the current
        !           581:      directory, if appropriate) are searched.
        !           582: 
        !           583: `-D NAME'
        !           584:      Predefine NAME as a macro, with definition `1'.
        !           585: 
        !           586: `-D NAME=DEFINITION'
        !           587:      Predefine NAME as a macro, with definition DEFINITION.  There are no
        !           588:      restrictions on the contents of DEFINITION, but if you are invoking
        !           589:      the preprocessor from a shell or shell-like program you may need to
        !           590:      use the shell's quoting syntax to protect characters such as spaces
        !           591:      that have a meaning in the shell syntax.
        !           592: 
        !           593: `-U NAME'
        !           594:      Do not predefine NAME.  If both `-U' and `-D' are specified for one
        !           595:      name, the `-U' beats the `-D' and the name is not predefined.
        !           596: 
        !           597: `-undef'
        !           598:      Do not predefine any nonstandard macros.
        !           599: 
        !           600: `-d'
        !           601:      Instead of outputting the result of preprocessing, output a list of
        !           602:      `#define' commands for all the macros defined during the execution of
        !           603:      the preprocessor.
        !           604: 
        !           605: `-M'
        !           606:      Instead of outputting the result of preprocessing, output a rule
        !           607:      suitable for `make' describing the dependencies of the main source
        !           608:      file.  The preprocessor outputs one `make' rule containing the object
        !           609:      file name for that source file, a colon, and the names of all the
        !           610:      included files.  If there are many included files then the rule is
        !           611:      split into several lines using `\'-newline.
        !           612: 
        !           613:      This feature is used in automatic updating of makefiles.
        !           614: 
        !           615: `-MM'
        !           616:      Like `-M' but mention only the files included with `#include "FILE"'. 
        !           617:      System header files included with `#include <FILE>' are omitted.
        !           618: 
        !           619: `-i FILE'
        !           620:      Process FILE as input, discarding the resulting output, before
        !           621:      processing the regular input file.  Because the output generated from
        !           622:      FILE is discarded, the only effect of `-i FILE' is to make the macros
        !           623:      defined in FILE available for use in the main input.
        !           624: 
        !           625: 
        !           626: File: cpp,  Node: Concept Index,  Next: Index,  Prev: Invocation,  Up: Top
        !           627: 
        !           628: Concept Index
        !           629: *************
        !           630: 
        !           631: * Menu:
        !           632: 
        !           633: * cascaded macros: Cascaded Macros.
        !           634: * commands: Commands.
        !           635: * concatenation: Concatenation.
        !           636: * conditionals: Conditionals.
        !           637: * header file: Header Files.
        !           638: * line control: Combining Sources.
        !           639: * macro body uses macro: Cascaded Macros.
        !           640: * null command: Other Commands.
        !           641: * options: Invocation.
        !           642: * output format: Output.
        !           643: * predefined macros: Predefined.
        !           644: * preprocessor commands: Commands.
        !           645: * redefining macros: Redefining.
        !           646: * self-reference: Self-Reference.
        !           647: * semicolons (after macro calls): Swallow Semicolon.
        !           648: * side effects (in macro arguments): Side Effects.
        !           649: * stringification: Stringification.
        !           650: * undefining macros: Undefining.
        !           651: * unsafe macros: Side Effects.
        !           652: 
        !           653:  
        !           654: File: cpp,  Node: Index,  Prev: Concept Index,  Up: Top
        !           655: 
        !           656: Index of Commands, Macros and Options
        !           657: *************************************
        !           658: 
        !           659: * Menu:
        !           660: 
        !           661: * #elif: #elif Command.
        !           662: * #else: #else Command.
        !           663: * #error: #error Command.
        !           664: * #if: Conditional Syntax.
        !           665: * #ifdef: Conditionals-Macros.
        !           666: * #ifndef: Conditionals-Macros.
        !           667: * #include: Include Syntax.
        !           668: * #line: Combining Sources.
        !           669: * #pragma: Other Commands.
        !           670: * -C: Invocation.
        !           671: * -D: Invocation.
        !           672: * -I: Invocation.
        !           673: * -M: Invocation.
        !           674: * -MM: Invocation.
        !           675: * -P: Invocation.
        !           676: * -T: Invocation.
        !           677: * -U: Invocation.
        !           678: * -d: Invocation.
        !           679: * -i: Invocation.
        !           680: * -pedantic: Invocation.
        !           681: * -undef: Invocation.
        !           682: * BSD: Nonstandard Predefined.
        !           683: * M68020: Nonstandard Predefined.
        !           684: * __DATE__: Standard Predefined.
        !           685: * __FILE__: Standard Predefined.
        !           686: * __LINE__: Standard Predefined.
        !           687: * __STDC__: Standard Predefined.
        !           688: * __TIME__: Standard Predefined.
        !           689: * defined: Conditionals-Macros.
        !           690: * m68k: Nonstandard Predefined.
        !           691: * mc68000: Nonstandard Predefined.
        !           692: * ns32000: Nonstandard Predefined.
        !           693: * pyr: Nonstandard Predefined.
        !           694: * sequent: Nonstandard Predefined.
        !           695: * sun: Nonstandard Predefined.
        !           696: * system header files: Header Uses.
        !           697: * unix: Nonstandard Predefined.
        !           698: * vax: Nonstandard Predefined.
        !           699: 
        !           700:  

unix.superglobalmegacorp.com

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