Annotation of gcc/cpp.info-2, revision 1.1

1.1     ! root        1: Info file cpp.info, produced by Makeinfo, -*- Text -*- from input file
        !             2: cpp.texi.
        !             3: 
        !             4:    This file documents the GNU C Preprocessor.
        !             5: 
        !             6:    Copyright (C) 1987, 1989, 1991 Free Software Foundation, Inc.
        !             7: 
        !             8:    Permission is granted to make and distribute verbatim copies of
        !             9: this manual provided the copyright notice and this permission notice
        !            10: are preserved on all copies.
        !            11: 
        !            12:    Permission is granted to copy and distribute modified versions of
        !            13: this manual under the conditions for verbatim copying, provided also
        !            14: that the entire resulting derived work is distributed under the terms
        !            15: of a permission notice identical to this one.
        !            16: 
        !            17:    Permission is granted to copy and distribute translations of this
        !            18: manual into another language, under the above conditions for modified
        !            19: versions.
        !            20: 
        !            21: 
        !            22: File: cpp.info,  Node: Swallow Semicolon,  Next: Side Effects,  Prev: Macro Parentheses,  Up: Macro Pitfalls
        !            23: 
        !            24: Swallowing the Semicolon
        !            25: ........................
        !            26: 
        !            27:    Often it is desirable to define a macro that expands into a compound
        !            28: statement.  Consider, for example, the following macro, that advances a
        !            29: pointer (the argument `p' says where to find it) across whitespace
        !            30: characters:
        !            31: 
        !            32:      #define SKIP_SPACES (p, limit)  \
        !            33:      { register char *lim = (limit); \
        !            34:        while (p != lim) {            \
        !            35:          if (*p++ != ' ') {          \
        !            36:            p--; break; }}}
        !            37: 
        !            38: Here Backslash-Newline is used to split the macro definition, which
        !            39: must be a single line, so that it resembles the way such C code would
        !            40: be laid out if not part of a macro definition.
        !            41: 
        !            42:    A call to this macro might be `SKIP_SPACES (p, lim)'.  Strictly
        !            43: speaking, the call expands to a compound statement, which is a complete
        !            44: statement with no need for a semicolon to end it.  But it looks like a
        !            45: function call.  So it minimizes confusion if you can use it like a
        !            46: function call, writing a semicolon afterward, as in `SKIP_SPACES (p,
        !            47: lim);'
        !            48: 
        !            49:    But this can cause trouble before `else' statements, because the
        !            50: semicolon is actually a null statement.  Suppose you write
        !            51: 
        !            52:      if (*p != 0)
        !            53:        SKIP_SPACES (p, lim);
        !            54:      else ...
        !            55: 
        !            56: The presence of two statements--the compound statement and a null
        !            57: statement--in between the `if' condition and the `else' makes invalid
        !            58: C code.
        !            59: 
        !            60:    The definition of the macro `SKIP_SPACES' can be altered to solve
        !            61: this problem, using a `do ... while' statement.  Here is how:
        !            62: 
        !            63:      #define SKIP_SPACES (p, limit)     \
        !            64:      do { register char *lim = (limit); \
        !            65:           while (p != lim) {            \
        !            66:             if (*p++ != ' ') {          \
        !            67:               p--; break; }}}           \
        !            68:      while (0)
        !            69: 
        !            70:    Now `SKIP_SPACES (p, lim);' expands into
        !            71: 
        !            72:      do {...} while (0);
        !            73: 
        !            74: which is one statement.
        !            75: 
        !            76: 
        !            77: File: cpp.info,  Node: Side Effects,  Next: Self-Reference,  Prev: Swallow Semicolon,  Up: Macro Pitfalls
        !            78: 
        !            79: Duplication of Side Effects
        !            80: ...........................
        !            81: 
        !            82:    Many C programs define a macro `min', for "minimum", like this:
        !            83: 
        !            84:      #define min(X, Y)  ((X) < (Y) ? (X) : (Y))
        !            85: 
        !            86:    When you use this macro with an argument containing a side effect,
        !            87: as shown here,
        !            88: 
        !            89:      next = min (x + y, foo (z));
        !            90: 
        !            91: it expands as follows:
        !            92: 
        !            93:      next = ((x + y) < (foo (z)) ? (x + y) : (foo (z)));
        !            94: 
        !            95: where `x + y' has been substituted for `X' and `foo (z)' for `Y'.
        !            96: 
        !            97:    The function `foo' is used only once in the statement as it appears
        !            98: in the program, but the expression `foo (z)' has been substituted
        !            99: twice into the macro expansion.  As a result, `foo' might be called
        !           100: two times when the statement is executed.  If it has side effects or
        !           101: if it takes a long time to compute, the results might not be what you
        !           102: intended.  We say that `min' is an "unsafe" macro.
        !           103: 
        !           104:    The best solution to this problem is to define `min' in a way that
        !           105: computes the value of `foo (z)' only once.  The C language offers no
        !           106: standard way to do this, but it can be done with GNU C extensions as
        !           107: follows:
        !           108: 
        !           109:      #define min(X, Y)                     \
        !           110:      ({ typeof (X) __x = (X), __y = (Y);   \
        !           111:         (__x < __y) ? __x : __y; })
        !           112: 
        !           113:    If you do not wish to use GNU C extensions, the only solution is to
        !           114: be careful when *using* the macro `min'.  For example, you can
        !           115: calculate the value of `foo (z)', save it in a variable, and use that
        !           116: variable in `min':
        !           117: 
        !           118:      #define min(X, Y)  ((X) < (Y) ? (X) : (Y))
        !           119:      ...
        !           120:      {
        !           121:        int tem = foo (z);
        !           122:        next = min (x + y, tem);
        !           123:      }
        !           124: 
        !           125: (where we assume that `foo' returns type `int').
        !           126: 
        !           127: 
        !           128: File: cpp.info,  Node: Self-Reference,  Next: Argument Prescan,  Prev: Side Effects,  Up: Macro Pitfalls
        !           129: 
        !           130: Self-Referential Macros
        !           131: .......................
        !           132: 
        !           133:    A "self-referential" macro is one whose name appears in its
        !           134: definition.  A special feature of ANSI Standard C is that the
        !           135: self-reference is not considered a macro call.  It is passed into the
        !           136: preprocessor output unchanged.
        !           137: 
        !           138:    Let's consider an example:
        !           139: 
        !           140:      #define foo (4 + foo)
        !           141: 
        !           142: where `foo' is also a variable in your program.
        !           143: 
        !           144:    Following the ordinary rules, each reference to `foo' will expand
        !           145: into `(4 + foo)'; then this will be rescanned and will expand into `(4
        !           146: + (4 + foo))'; and so on until it causes a fatal error (memory full)
        !           147: in the preprocessor.
        !           148: 
        !           149:    However, the special rule about self-reference cuts this process
        !           150: short after one step, at `(4 + foo)'.  Therefore, this macro definition
        !           151: has the possibly useful effect of causing the program to add 4 to the
        !           152: value of `foo' wherever `foo' is referred to.
        !           153: 
        !           154:    In most cases, it is a bad idea to take advantage of this feature. 
        !           155: A person reading the program who sees that `foo' is a variable will
        !           156: not expect that it is a macro as well.  The reader will come across the
        !           157: identifier `foo' in the program and think its value should be that of
        !           158: the variable `foo', whereas in fact the value is four greater.
        !           159: 
        !           160:    The special rule for self-reference applies also to "indirect"
        !           161: self-reference.  This is the case where a macro X expands to use a
        !           162: macro `y', and `y''s expansion refers to the macro `x'.  The resulting
        !           163: reference to `x' comes indirectly from the expansion of `x', so it is
        !           164: a self-reference and is not further expanded.  Thus, after
        !           165: 
        !           166:      #define x (4 + y)
        !           167:      #define y (2 * x)
        !           168: 
        !           169: `x' would expand into `(4 + (2 * x))'.  Clear?
        !           170: 
        !           171:    But suppose `y' is used elsewhere, not from the definition of `x'. 
        !           172: Then the use of `x' in the expansion of `y' is not a self-reference
        !           173: because `x' is not "in progress".  So it does expand.  However, the
        !           174: expansion of `x' contains a reference to `y', and that is an indirect
        !           175: self-reference now because `y' is "in progress".  The result is that
        !           176: `y' expands to `(2 * (4 + y))'.
        !           177: 
        !           178:    It is not clear that this behavior would ever be useful, but it is
        !           179: specified by the ANSI C standard, so you may need to understand it.
        !           180: 
        !           181: 
        !           182: File: cpp.info,  Node: Argument Prescan,  Next: Cascaded Macros,  Prev: Self-Reference,  Up: Macro Pitfalls
        !           183: 
        !           184: Separate Expansion of Macro Arguments
        !           185: .....................................
        !           186: 
        !           187:    We have explained that the expansion of a macro, including the
        !           188: substituted actual arguments, is scanned over again for macro calls to
        !           189: be expanded.
        !           190: 
        !           191:    What really happens is more subtle: first each actual argument text
        !           192: is scanned separately for macro calls.  Then the results of this are
        !           193: substituted into the macro body to produce the macro expansion, and
        !           194: the macro expansion is scanned again for macros to expand.
        !           195: 
        !           196:    The result is that the actual arguments are scanned *twice* to
        !           197: expand macro calls in them.
        !           198: 
        !           199:    Most of the time, this has no effect.  If the actual argument
        !           200: contained any macro calls, they are expanded during the first scan. 
        !           201: The result therefore contains no macro calls, so the second scan does
        !           202: not change it.  If the actual argument were substituted as given, with
        !           203: no prescan, the single remaining scan would find the same macro calls
        !           204: and produce the same results.
        !           205: 
        !           206:    You might expect the double scan to change the results when a
        !           207: self-referential macro is used in an actual argument of another macro
        !           208: (*note Self-Reference::.): the self-referential macro would be
        !           209: expanded once in the first scan, and a second time in the second scan.
        !           210:  But this is not what happens.  The self-references that do not expand
        !           211: in the first scan are marked so that they will not expand in the
        !           212: second scan either.
        !           213: 
        !           214:    The prescan is not done when an argument is stringified or
        !           215: concatenated.  Thus,
        !           216: 
        !           217:      #define str(s) #s
        !           218:      #define foo 4
        !           219:      str (foo)
        !           220: 
        !           221: expands to `"foo"'.  Once more, prescan has been prevented from having
        !           222: any noticeable effect.
        !           223: 
        !           224:    More precisely, stringification and concatenation use the argument
        !           225: as written, in un-prescanned form.  The same actual argument would be
        !           226: used in prescanned form if it is substituted elsewhere without
        !           227: stringification or concatenation.
        !           228: 
        !           229:      #define str(s) #s lose(s)
        !           230:      #define foo 4
        !           231:      str (foo)
        !           232: 
        !           233:    expands to `"foo" lose(4)'.
        !           234: 
        !           235:    You might now ask, "Why mention the prescan, if it makes no
        !           236: difference?  And why not skip it and make the preprocessor faster?" 
        !           237: The answer is that the prescan does make a difference in three special
        !           238: cases:
        !           239: 
        !           240:    * Nested calls to a macro.
        !           241: 
        !           242:    * Macros that call other macros that stringify or concatenate.
        !           243: 
        !           244:    * Macros whose expansions contain unshielded commas.
        !           245: 
        !           246:    We say that "nested" calls to a macro occur when a macro's actual
        !           247: argument contains a call to that very macro.  For example, if `f' is a
        !           248: macro that expects one argument, `f (f (1))' is a nested pair of calls
        !           249: to `f'.  The desired expansion is made by expanding `f (1)' and
        !           250: substituting that into the definition of `f'.  The prescan causes the
        !           251: expected result to happen.  Without the prescan, `f (1)' itself would
        !           252: be substituted as an actual argument, and the inner use of `f' would
        !           253: appear during the main scan as an indirect self-reference and would not
        !           254: be expanded.  Here, the prescan cancels an undesirable side effect (in
        !           255: the medical, not computational, sense of the term) of the special rule
        !           256: for self-referential macros.
        !           257: 
        !           258:    But prescan causes trouble in certain other cases of nested macro
        !           259: calls.  Here is an example:
        !           260: 
        !           261:      #define foo  a,b
        !           262:      #define bar(x) lose(x)
        !           263:      #define lose(x) (1 + (x))
        !           264:      
        !           265:      bar(foo)
        !           266: 
        !           267: We would like `bar(foo)' to turn into `(1 + (foo))', which would then
        !           268: turn into `(1 + (a,b))'.  But instead, `bar(foo)' expands into
        !           269: `lose(a,b)', and you get an error because `lose' requires a single
        !           270: argument.  In this case, the problem is easily solved by the same
        !           271: parentheses that ought to be used to prevent misnesting of arithmetic
        !           272: operations:
        !           273: 
        !           274:      #define foo (a,b)
        !           275:      #define bar(x) lose((x))
        !           276: 
        !           277:    The problem is more serious when the operands of the macro are not
        !           278: expressions; for example, when they are statements.  Then parentheses
        !           279: are unacceptable because they would make for invalid C code:
        !           280: 
        !           281:      #define foo { int a, b; ... }
        !           282: 
        !           283: In GNU C you can shield the commas using the `({...})' construct which
        !           284: turns a compound statement into an expression:
        !           285: 
        !           286:      #define foo ({ int a, b; ... })
        !           287: 
        !           288:    Or you can rewrite the macro definition to avoid such commas:
        !           289: 
        !           290:      #define foo { int a; int b; ... }
        !           291: 
        !           292:    There is also one case where prescan is useful.  It is possible to
        !           293: use prescan to expand an argument and then stringify it--if you use
        !           294: two levels of macros.  Let's add a new macro `xstr' to the example
        !           295: shown above:
        !           296: 
        !           297:      #define xstr(s) str(s)
        !           298:      #define str(s) #s
        !           299:      #define foo 4
        !           300:      xstr (foo)
        !           301: 
        !           302:    This expands into `"4"', not `"foo"'.  The reason for the
        !           303: difference is that the argument of `xstr' is expanded at prescan
        !           304: (because `xstr' does not specify stringification or concatenation of
        !           305: the argument).  The result of prescan then forms the actual argument
        !           306: for `str'.  `str' uses its argument without prescan because it
        !           307: performs stringification; but it cannot prevent or undo the prescanning
        !           308: already done by `xstr'.
        !           309: 
        !           310: 
        !           311: File: cpp.info,  Node: Cascaded Macros,  Prev: Argument Prescan,  Up: Macro Pitfalls
        !           312: 
        !           313: Cascaded Use of Macros
        !           314: ......................
        !           315: 
        !           316:    A "cascade" of macros is when one macro's body contains a reference
        !           317: to another macro.  This is very common practice.  For example,
        !           318: 
        !           319:      #define BUFSIZE 1020
        !           320:      #define TABLESIZE BUFSIZE
        !           321: 
        !           322:    This is not at all the same as defining `TABLESIZE' to be `1020'. 
        !           323: The `#define' for `TABLESIZE' uses exactly the body you specify--in
        !           324: this case, `BUFSIZE'--and does not check to see whether it too is the
        !           325: name of a macro.
        !           326: 
        !           327:    It's only when you *use* `TABLESIZE' that the result of its
        !           328: expansion is checked for more macro names.
        !           329: 
        !           330:    This makes a difference if you change the definition of `BUFSIZE'
        !           331: at some point in the source file.  `TABLESIZE', defined as shown, will
        !           332: always expand using the definition of `BUFSIZE' that is currently in
        !           333: effect:
        !           334: 
        !           335:      #define BUFSIZE 1020
        !           336:      #define TABLESIZE BUFSIZE
        !           337:      #undef BUFSIZE
        !           338:      #define BUFSIZE 37
        !           339: 
        !           340: Now `TABLESIZE' expands (in two stages) to `37'.
        !           341: 
        !           342: 
        !           343: File: cpp.info,  Node: Conditionals,  Next: Combining Sources,  Prev: Macros,  Up: Top
        !           344: 
        !           345: Conditionals
        !           346: ============
        !           347: 
        !           348:    In a macro processor, a "conditional" is a command that allows a
        !           349: part of the program to be ignored during compilation, on some
        !           350: conditions.  In the C preprocessor, a conditional can test either an
        !           351: arithmetic expression or whether a name is defined as a macro.
        !           352: 
        !           353:    A conditional in the C preprocessor resembles in some ways an `if'
        !           354: statement in C, but it is important to understand the difference
        !           355: between them.  The condition in an `if' statement is tested during the
        !           356: execution of your program.  Its purpose is to allow your program to
        !           357: behave differently from run to run, depending on the data it is
        !           358: operating on.  The condition in a preprocessor conditional command is
        !           359: tested when your program is compiled.  Its purpose is to allow
        !           360: different code to be included in the program depending on the
        !           361: situation at the time of compilation.
        !           362: 
        !           363: * Menu:
        !           364: 
        !           365: * Uses: Conditional Uses.       What conditionals are for.
        !           366: * Syntax: Conditional Syntax.   How conditionals are written.
        !           367: * Deletion: Deleted Code.       Making code into a comment.
        !           368: * Macros: Conditionals-Macros.  Why conditionals are used with macros.
        !           369: * Errors: #error Command.       Detecting inconsistent compilation parameters.
        !           370: 
        !           371: 
        !           372: File: cpp.info,  Node: Conditional Uses,  Next: Conditional Syntax,  Prev: Conditionals,  Up: Conditionals
        !           373: 
        !           374: Why Conditionals are Used
        !           375: -------------------------
        !           376: 
        !           377:    Generally there are three kinds of reason to use a conditional.
        !           378: 
        !           379:    * A program may need to use different code depending on the machine
        !           380:      or operating system it is to run on.  In some cases the code for
        !           381:      one operating system may be erroneous on another operating
        !           382:      system; for example, it might refer to library routines that do
        !           383:      not exist on the other system.  When this happens, it is not
        !           384:      enough to avoid executing the invalid code: merely having it in
        !           385:      the program makes it impossible to link the program and run it. 
        !           386:      With a preprocessor conditional, the offending code can be
        !           387:      effectively excised from the program when it is not valid.
        !           388: 
        !           389:    * You may want to be able to compile the same source file into two
        !           390:      different programs.  Sometimes the difference between the
        !           391:      programs is that one makes frequent time-consuming consistency
        !           392:      checks on its intermediate data while the other does not.
        !           393: 
        !           394:    * A conditional whose condition is always false is a good way to
        !           395:      exclude code from the program but keep it as a sort of comment
        !           396:      for future reference.
        !           397: 
        !           398:    Most simple programs that are intended to run on only one machine
        !           399: will not need to use preprocessor conditionals.
        !           400: 
        !           401: 
        !           402: File: cpp.info,  Node: Conditional Syntax,  Next: Deleted Code,  Prev: Conditional Uses,  Up: Conditionals
        !           403: 
        !           404: Syntax of Conditionals
        !           405: ----------------------
        !           406: 
        !           407:    A conditional in the C preprocessor begins with a "conditional
        !           408: command": `#if', `#ifdef' or `#ifndef'.  *Note Conditionals-Macros::,
        !           409: for information on `#ifdef' and `#ifndef'; only `#if' is explained
        !           410: here.
        !           411: 
        !           412: * Menu:
        !           413: 
        !           414: * If: #if Command.     Basic conditionals using `#if' and `#endif'.
        !           415: * Else: #else Command. Including some text if the condition fails.
        !           416: * Elif: #elif Command. Testing several alternative possibilities.
        !           417: 
        !           418: 
        !           419: File: cpp.info,  Node: #if Command,  Next: #else Command,  Prev: Conditional Syntax,  Up: Conditional Syntax
        !           420: 
        !           421: The `#if' Command
        !           422: .................
        !           423: 
        !           424:    The `#if' command in its simplest form consists of
        !           425: 
        !           426:      #if EXPRESSION
        !           427:      CONTROLLED TEXT
        !           428:      #endif /* EXPRESSION */
        !           429: 
        !           430:    The comment following the `#endif' is not required, but it is a good
        !           431: practice because it helps people match the `#endif' to the
        !           432: corresponding `#if'.  Such comments should always be used, except in
        !           433: short conditionals that are not nested.  In fact, you can put anything
        !           434: at all after the `#endif' and it will be ignored by the GNU C
        !           435: preprocessor, but only comments are acceptable in ANSI Standard C.
        !           436: 
        !           437:    EXPRESSION is a C expression of integer type, subject to stringent
        !           438: restrictions.  It may contain
        !           439: 
        !           440:    * Integer constants, which are all regarded as `long' or `unsigned
        !           441:      long'.
        !           442: 
        !           443:    * Character constants, which are interpreted according to the
        !           444:      character set and conventions of the machine and operating system
        !           445:      on which the preprocessor is running.  The GNU C preprocessor
        !           446:      uses the C data type `char' for these character constants;
        !           447:      therefore, whether some character codes are negative is
        !           448:      determined by the C compiler used to compile the preprocessor. 
        !           449:      If it treats `char' as signed, then character codes large enough
        !           450:      to set the sign bit will be considered negative; otherwise, no
        !           451:      character code is considered negative.
        !           452: 
        !           453:    * Arithmetic operators for addition, subtraction, multiplication,
        !           454:      division, bitwise operations, shifts, comparisons, and `&&' and
        !           455:      `||'.
        !           456: 
        !           457:    * Identifiers that are not macros, which are all treated as zero(!).
        !           458: 
        !           459:    * Macro calls.  All macro calls in the expression are expanded
        !           460:      before actual computation of the expression's value begins.
        !           461: 
        !           462:    Note that `sizeof' operators and `enum'-type values are not allowed. 
        !           463: `enum'-type values, like all other identifiers that are not taken as
        !           464: macro calls and expanded, are treated as zero.
        !           465: 
        !           466:    The CONTROLLED TEXT inside of a conditional can include
        !           467: preprocessor commands.  Then the commands inside the conditional are
        !           468: obeyed only if that branch of the conditional succeeds.  The text can
        !           469: also contain other conditional groups.  However, the `#if''s and
        !           470: `#endif''s must balance.
        !           471: 
        !           472: 
        !           473: File: cpp.info,  Node: #else Command,  Next: #elif Command,  Prev: #if Command,  Up: Conditional Syntax
        !           474: 
        !           475: The `#else' Command
        !           476: ...................
        !           477: 
        !           478:    The `#else' command can be added to a conditional to provide
        !           479: alternative text to be used if the condition is false.  This is what
        !           480: it looks like:
        !           481: 
        !           482:      #if EXPRESSION
        !           483:      TEXT-IF-TRUE
        !           484:      #else /* Not EXPRESSION */
        !           485:      TEXT-IF-FALSE
        !           486:      #endif /* Not EXPRESSION */
        !           487: 
        !           488:    If EXPRESSION is nonzero, and thus the TEXT-IF-TRUE is active, then
        !           489: `#else' acts like a failing conditional and the TEXT-IF-FALSE is
        !           490: ignored.  Contrariwise, if the `#if' conditional fails, the
        !           491: TEXT-IF-FALSE is considered included.
        !           492: 
        !           493: 
        !           494: File: cpp.info,  Node: #elif Command,  Prev: #else Command,  Up: Conditional Syntax
        !           495: 
        !           496: The `#elif' Command
        !           497: ...................
        !           498: 
        !           499:    One common case of nested conditionals is used to check for more
        !           500: than two possible alternatives.  For example, you might have
        !           501: 
        !           502:      #if X == 1
        !           503:      ...
        !           504:      #else /* X != 1 */
        !           505:      #if X == 2
        !           506:      ...
        !           507:      #else /* X != 2 */
        !           508:      ...
        !           509:      #endif /* X != 2 */
        !           510:      #endif /* X != 1 */
        !           511: 
        !           512:    Another conditional command, `#elif', allows this to be abbreviated
        !           513: as follows:
        !           514: 
        !           515:      #if X == 1
        !           516:      ...
        !           517:      #elif X == 2
        !           518:      ...
        !           519:      #else /* X != 2 and X != 1*/
        !           520:      ...
        !           521:      #endif /* X != 2 and X != 1*/
        !           522: 
        !           523:    `#elif' stands for "else if".  Like `#else', it goes in the middle
        !           524: of a `#if'-`#endif' pair and subdivides it; it does not require a
        !           525: matching `#endif' of its own.  Like `#if', the `#elif' command
        !           526: includes an expression to be tested.
        !           527: 
        !           528:    The text following the `#elif' is processed only if the original
        !           529: `#if'-condition failed and the `#elif' condition succeeds.  More than
        !           530: one `#elif' can go in the same `#if'-`#endif' group.  Then the text
        !           531: after each `#elif' is processed only if the `#elif' condition succeeds
        !           532: after the original `#if' and any previous `#elif''s within it have
        !           533: failed.  `#else' is equivalent to `#elif 1', and `#else' is allowed
        !           534: after any number of `#elif''s, but `#elif' may not follow `#else'.
        !           535: 
        !           536: 
        !           537: File: cpp.info,  Node: Deleted Code,  Next: Conditionals-Macros,  Prev: Conditional Syntax,  Up: Conditionals
        !           538: 
        !           539: Keeping Deleted Code for Future Reference
        !           540: -----------------------------------------
        !           541: 
        !           542:    If you replace or delete a part of the program but want to keep the
        !           543: old code around as a comment for future reference, the easy way to do
        !           544: this is to put `#if 0' before it and `#endif' after it.
        !           545: 
        !           546:    This works even if the code being turned off contains conditionals,
        !           547: but they must be entire conditionals (balanced `#if' and `#endif').
        !           548: 
        !           549: 
        !           550: File: cpp.info,  Node: Conditionals-Macros,  Next: #error Command,  Prev: Deleted Code,  Up: Conditionals
        !           551: 
        !           552: Conditionals and Macros
        !           553: -----------------------
        !           554: 
        !           555:    Conditionals are rarely useful except in connection with macros.  A
        !           556: `#if' command whose expression uses no macros is equivalent to `#if 1'
        !           557: or `#if 0'; you might as well determine which one, by computing the
        !           558: value of the expression yourself, and then simplify the program.  But
        !           559: when the expression uses macros, its value can vary from compilation
        !           560: to compilation.
        !           561: 
        !           562:    For example, here is a conditional that tests the expression
        !           563: `BUFSIZE == 1020', where `BUFSIZE' must be a macro.
        !           564: 
        !           565:      #if BUFSIZE == 1020
        !           566:        printf ("Large buffers!\n");
        !           567:      #endif /* BUFSIZE is large */
        !           568: 
        !           569:    The special operator `defined' may be used in `#if' expressions to
        !           570: test whether a certain name is defined as a macro.  Either `defined
        !           571: NAME' or `defined (NAME)' is an expression whose value is 1 if NAME is
        !           572: defined as macro at the current point in the program, and 0 otherwise.
        !           573:  For the `defined' operator it makes no difference what the definition
        !           574: of the macro is; all that matters is whether there is a definition. 
        !           575: Thus, for example,
        !           576: 
        !           577:      #if defined (vax) || defined (ns16000)
        !           578: 
        !           579: would include the following code if either of the names `vax' and
        !           580: `ns16000' is defined as a macro.
        !           581: 
        !           582:    If a macro is defined and later undefined with `#undef', subsequent
        !           583: use of the `defined' operator will return 0, because the name is no
        !           584: longer defined.  If the macro is defined again with another `#define',
        !           585: `defined' will recommence returning 1.
        !           586: 
        !           587:    Conditionals that test just the definedness of one name are very
        !           588: common, so there are two special short conditional commands for this
        !           589: case.  They are
        !           590: 
        !           591: `#ifdef NAME'
        !           592:      is equivalent to `#if defined (NAME)'.
        !           593: 
        !           594: `#ifndef NAME'
        !           595:      is equivalent to `#if ! defined (NAME)'.
        !           596: 
        !           597:    Macro definitions can vary between compilations for several reasons.
        !           598: 
        !           599:    * Some macros are predefined on each kind of machine.  For example,
        !           600:      on a Vax, the name `vax' is a predefined macro.  On other
        !           601:      machines, it would not be defined.
        !           602: 
        !           603:    * Many more macros are defined by system header files.  Different
        !           604:      systems and machines define different macros, or give them
        !           605:      different values.  It is useful to test these macros with
        !           606:      conditionals to avoid using a system feature on a machine where
        !           607:      it is not implemented.
        !           608: 
        !           609:    * Macros are a common way of allowing users to customize a program
        !           610:      for different machines or applications.  For example, the macro
        !           611:      `BUFSIZE' might be defined in a configuration file for your
        !           612:      program that is included as a header file in each source file. 
        !           613:      You would use `BUFSIZE' in a preprocessor conditional in order to
        !           614:      generate different code depending on the chosen configuration.
        !           615: 
        !           616:    * Macros can be defined or undefined with `-D' and `-U' command
        !           617:      options when you compile the program.  You can arrange to compile
        !           618:      the same source file into two different programs by choosing a
        !           619:      macro name to specify which program you want, writing conditionals
        !           620:      to test whether or how this macro is defined, and then controlling
        !           621:      the state of the macro with compiler command options.  *Note
        !           622:      Invocation::.
        !           623: 
        !           624: 
        !           625: File: cpp.info,  Node: #error Command,  Prev: Conditionals-Macros,  Up: Conditionals
        !           626: 
        !           627: The `#error' and `#warning' Commands
        !           628: ------------------------------------
        !           629: 
        !           630:    The command `#error' causes the preprocessor to report a fatal
        !           631: error.  The rest of the line that follows `#error' is used as the
        !           632: error message.
        !           633: 
        !           634:    You would use `#error' inside of a conditional that detects a
        !           635: combination of parameters which you know the program does not properly
        !           636: support.  For example, if you know that the program will not run
        !           637: properly on a Vax, you might write
        !           638: 
        !           639:      #ifdef vax
        !           640:      #error Won't work on Vaxen.  See comments at get_last_object.
        !           641:      #endif
        !           642: 
        !           643: *Note Nonstandard Predefined::, for why this works.
        !           644: 
        !           645:    If you have several configuration parameters that must be set up by
        !           646: the installation in a consistent way, you can use conditionals to
        !           647: detect an inconsistency and report it with `#error'.  For example,
        !           648: 
        !           649:      #if HASH_TABLE_SIZE % 2 == 0 || HASH_TABLE_SIZE % 3 == 0 \
        !           650:          || HASH_TABLE_SIZE % 5 == 0
        !           651:      #error HASH_TABLE_SIZE should not be divisible by a small prime
        !           652:      #endif
        !           653: 
        !           654:    The command `#warning' is like the command `#error', but causes the
        !           655: preprocessor to issue a warning and continue preprocessing.  The rest
        !           656: of the line that follows `#warning' is used as the warning message.
        !           657: 
        !           658:    You might use `#warning' in obsolete header files, with a message
        !           659: directing the user to the header file which should be used instead.
        !           660: 
        !           661: 
        !           662: File: cpp.info,  Node: Combining Sources,  Next: Other Commands,  Prev: Conditionals,  Up: Top
        !           663: 
        !           664: Combining Source Files
        !           665: ======================
        !           666: 
        !           667:    One of the jobs of the C preprocessor is to inform the C compiler
        !           668: of where each line of C code came from: which source file and which
        !           669: line number.
        !           670: 
        !           671:    C code can come from multiple source files if you use `#include';
        !           672: both `#include' and the use of conditionals and macros can cause the
        !           673: line number of a line in the preprocessor output to be different from
        !           674: the line's number in the original source file.  You will appreciate
        !           675: the value of making both the C compiler (in error messages) and
        !           676: symbolic debuggers such as GDB use the line numbers in your source
        !           677: file.
        !           678: 
        !           679:    The C preprocessor builds on this feature by offering a command by
        !           680: which you can control the feature explicitly.  This is useful when a
        !           681: file for input to the C preprocessor is the output from another
        !           682: program such as the `bison' parser generator, which operates on
        !           683: another file that is the true source file.  Parts of the output from
        !           684: `bison' are generated from scratch, other parts come from a standard
        !           685: parser file.  The rest are copied nearly verbatim from the source
        !           686: file, but their line numbers in the `bison' output are not the same as
        !           687: their original line numbers.  Naturally you would like compiler error
        !           688: messages and symbolic debuggers to know the original source file and
        !           689: line number of each line in the `bison' input.
        !           690: 
        !           691:    `bison' arranges this by writing `#line' commands into the output
        !           692: file.  `#line' is a command that specifies the original line number
        !           693: and source file name for subsequent input in the current preprocessor
        !           694: input file.  `#line' has three variants:
        !           695: 
        !           696: `#line LINENUM'
        !           697:      Here LINENUM is a decimal integer constant.  This specifies that
        !           698:      the line number of the following line of input, in its original
        !           699:      source file, was LINENUM.
        !           700: 
        !           701: `#line LINENUM FILENAME'
        !           702:      Here LINENUM is a decimal integer constant and FILENAME is a
        !           703:      string constant.  This specifies that the following line of input
        !           704:      came originally from source file FILENAME and its line number
        !           705:      there was LINENUM.  Keep in mind that FILENAME is not just a file
        !           706:      name; it is surrounded by doublequote characters so that it looks
        !           707:      like a string constant.
        !           708: 
        !           709: `#line ANYTHING ELSE'
        !           710:      ANYTHING ELSE is checked for macro calls, which are expanded. 
        !           711:      The result should be a decimal integer constant followed
        !           712:      optionally by a string constant, as described above.
        !           713: 
        !           714:    `#line' commands alter the results of the `__FILE__' and `__LINE__'
        !           715: predefined macros from that point on.  *Note Standard Predefined::.
        !           716: 
        !           717: 
        !           718: File: cpp.info,  Node: Other Commands,  Next: Output,  Prev: Combining Sources,  Up: Top
        !           719: 
        !           720: Miscellaneous Preprocessor Commands
        !           721: ===================================
        !           722: 
        !           723:    This section describes three additional preprocessor commands. 
        !           724: They are not very useful, but are mentioned for completeness.
        !           725: 
        !           726:    The "null command" consists of a `#' followed by a Newline, with
        !           727: only whitespace (including comments) in between.  A null command is
        !           728: understood as a preprocessor command but has no effect on the
        !           729: preprocessor output.  The primary significance of the existence of the
        !           730: null command is that an input line consisting of just a `#' will
        !           731: produce no output, rather than a line of output containing just a `#'.
        !           732:  Supposedly some old C programs contain such lines.
        !           733: 
        !           734:    The ANSI standard specifies that the `#pragma' command has an
        !           735: arbitrary, implementation-defined effect.  In the GNU C preprocessor,
        !           736: `#pragma' commands are ignored, except for `#pragma once' (*note
        !           737: Once-Only::.).
        !           738: 
        !           739:    The `#ident' command is supported for compatibility with certain
        !           740: other systems.  It is followed by a line of text.  On some systems, the
        !           741: text is copied into a special place in the object file; on most
        !           742: systems, the text is ignored and this directive has no effect. 
        !           743: Typically `#ident' is only used in header files supplied with those
        !           744: systems where it is meaningful.
        !           745: 
        !           746: 
        !           747: File: cpp.info,  Node: Output,  Next: Invocation,  Prev: Other Commands,  Up: Top
        !           748: 
        !           749: C Preprocessor Output
        !           750: =====================
        !           751: 
        !           752:    The output from the C preprocessor looks much like the input, except
        !           753: that all preprocessor command lines have been replaced with blank lines
        !           754: and all comments with spaces.  Whitespace within a line is not altered;
        !           755: however, a space is inserted after the expansions of most macro calls.
        !           756: 
        !           757:    Source file name and line number information is conveyed by lines of
        !           758: the form
        !           759: 
        !           760:      # LINENUM FILENAME FLAG
        !           761: 
        !           762: which are inserted as needed into the middle of the input (but never
        !           763: within a string or character constant).  Such a line means that the
        !           764: following line originated in file FILENAME at line LINENUM.
        !           765: 
        !           766:    The third field, FLAG, may be a number, or may be absent.  It is
        !           767: `1' for the beginning of a new source file, and `2' for return to an
        !           768: old source file at the end of an included file.  It is absent
        !           769: otherwise.
        !           770: 
        !           771: 
        !           772: File: cpp.info,  Node: Invocation,  Next: Concept Index,  Prev: Output,  Up: Top
        !           773: 
        !           774: Invoking the C Preprocessor
        !           775: ===========================
        !           776: 
        !           777:    Most often when you use the C preprocessor you will not have to
        !           778: invoke it explicitly: the C compiler will do so automatically. 
        !           779: However, the preprocessor is sometimes useful individually.
        !           780: 
        !           781:    The C preprocessor expects two file names as arguments, INFILE and
        !           782: OUTFILE.  The preprocessor reads INFILE together with any other files
        !           783: it specifies with `#include'.  All the output generated by the
        !           784: combined input files is written in OUTFILE.
        !           785: 
        !           786:    Either INFILE or OUTFILE may be `-', which as INFILE means to read
        !           787: from standard input and as OUTFILE means to write to standard output. 
        !           788: Also, if OUTFILE or both file names are omitted, the standard output
        !           789: and standard input are used for the omitted file names.
        !           790: 
        !           791:    Here is a table of command options accepted by the C preprocessor. 
        !           792: These options can also be given when compiling a C program; they are
        !           793: passed along automatically to the preprocessor when it is invoked by
        !           794: the compiler.
        !           795: 
        !           796: `-P'
        !           797:      Inhibit generation of `#'-lines with line-number information in
        !           798:      the output from the preprocessor (*note Output::.).  This might be
        !           799:      useful when running the preprocessor on something that is not C
        !           800:      code and will be sent to a program which might be confused by the
        !           801:      `#'-lines.
        !           802: 
        !           803: `-C'
        !           804:      Do not discard comments: pass them through to the output file. 
        !           805:      Comments appearing in arguments of a macro call will be copied to
        !           806:      the output before the expansion of the macro call.
        !           807: 
        !           808: `-trigraphs'
        !           809:      Process ANSI standard trigraph sequences.  These are
        !           810:      three-character sequences, all starting with `??', that are
        !           811:      defined by ANSI C to stand for single characters.  For example,
        !           812:      `??/' stands for `\', so `'??/n'' is a character constant for a
        !           813:      newline.  Strictly speaking, the GNU C preprocessor does not
        !           814:      support all programs in ANSI Standard C unless `-trigraphs' is
        !           815:      used, but if you ever notice the difference it will be with
        !           816:      relief.
        !           817: 
        !           818:      You don't want to know any more about trigraphs.
        !           819: 
        !           820: `-pedantic'
        !           821:      Issue warnings required by the ANSI C standard in certain cases
        !           822:      such as when text other than a comment follows `#else' or
        !           823:      `#endif'.
        !           824: 
        !           825: `-pedantic-errors'
        !           826:      Like `-pedantic', except that errors are produced rather than
        !           827:      warnings.
        !           828: 
        !           829: `-Wtrigraphs'
        !           830:      Warn if any trigraphs are encountered (assuming they are enabled).
        !           831: 
        !           832: `-Wcomment'
        !           833:      Warn whenever a comment-start sequence `/*' appears in a comment.
        !           834: 
        !           835: `-Wall'
        !           836:      Requests both `-Wtrigraphs' and `-Wcomment' (but not
        !           837:      `-Wtraditional').
        !           838: 
        !           839: `-Wtraditional'
        !           840:      Warn about certain constructs that behave differently in
        !           841:      traditional and ANSI C.
        !           842: 
        !           843: `-I DIRECTORY'
        !           844:      Add the directory DIRECTORY to the end of the list of directories
        !           845:      to be searched for header files (*note Include Syntax::.).  This
        !           846:      can be used to override a system header file, substituting your
        !           847:      own version, since these directories are searched before the
        !           848:      system header file directories.  If you use more than one `-I'
        !           849:      option, the directories are scanned in left-to-right order; the
        !           850:      standard system directories come after.
        !           851: 
        !           852: `-I-'
        !           853:      Any directories specified with `-I' options before the `-I-'
        !           854:      option are searched only for the case of `#include "FILE"'; they
        !           855:      are not searched for `#include <FILE>'.
        !           856: 
        !           857:      If additional directories are specified with `-I' options after
        !           858:      the `-I-', these directories are searched for all `#include'
        !           859:      directives.
        !           860: 
        !           861:      In addition, the `-I-' option inhibits the use of the current
        !           862:      directory as the first search directory for `#include "FILE"'. 
        !           863:      Therefore, the current directory is searched only if it is
        !           864:      requested explicitly with `-I.'.  Specifying both `-I-' and `-I.'
        !           865:      allows you to control precisely which directories are searched
        !           866:      before the current one and which are searched after.
        !           867: 
        !           868: `-nostdinc'
        !           869:      Do not search the standard system directories for header files. 
        !           870:      Only the directories you have specified with `-I' options (and
        !           871:      the current directory, if appropriate) are searched.
        !           872: 
        !           873: `-nostdinc++'
        !           874:      Do not search for header files in the C++-specific standard
        !           875:      directories, but do still search the other standard directories. 
        !           876:      (This option is used when building `libg++'.)
        !           877: 
        !           878: `-D NAME'
        !           879:      Predefine NAME as a macro, with definition `1'.
        !           880: 
        !           881: `-D NAME=DEFINITION'
        !           882:      Predefine NAME as a macro, with definition DEFINITION.  There are
        !           883:      no restrictions on the contents of DEFINITION, but if you are
        !           884:      invoking the preprocessor from a shell or shell-like program you
        !           885:      may need to use the shell's quoting syntax to protect characters
        !           886:      such as spaces that have a meaning in the shell syntax.  If you
        !           887:      use more than one `-D' for the same NAME, the rightmost
        !           888:      definition takes effect.
        !           889: 
        !           890: `-U NAME'
        !           891:      Do not predefine NAME.  If both `-U' and `-D' are specified for
        !           892:      one name, the `-U' beats the `-D' and the name is not predefined.
        !           893: 
        !           894: `-undef'
        !           895:      Do not predefine any nonstandard macros.
        !           896: 
        !           897: `-dM'
        !           898:      Instead of outputting the result of preprocessing, output a list
        !           899:      of `#define' commands for all the macros defined during the
        !           900:      execution of the preprocessor, including predefined macros.  This
        !           901:      gives you a way of finding out what is predefined in your version
        !           902:      of the preprocessor; assuming you have no file `foo.h', the
        !           903:      command
        !           904: 
        !           905:           touch foo.h; cpp -dM foo.h
        !           906: 
        !           907:      will show the values of any predefined macros.
        !           908: 
        !           909: `-dD'
        !           910:      Like `-dM' except in two respects: it does *not* include the
        !           911:      predefined macros, and it outputs *both* the `#define' commands
        !           912:      and the result of preprocessing.  Both kinds of output go to the
        !           913:      standard output file.
        !           914: 
        !           915: `-M'
        !           916:      Instead of outputting the result of preprocessing, output a rule
        !           917:      suitable for `make' describing the dependencies of the main
        !           918:      source file.  The preprocessor outputs one `make' rule containing
        !           919:      the object file name for that source file, a colon, and the names
        !           920:      of all the included files.  If there are many included files then
        !           921:      the rule is split into several lines using `\'-newline.
        !           922: 
        !           923:      This feature is used in automatic updating of makefiles.
        !           924: 
        !           925: `-MM'
        !           926:      Like `-M' but mention only the files included with `#include
        !           927:      "FILE"'.  System header files included with `#include <FILE>' are
        !           928:      omitted.
        !           929: 
        !           930: `-MD'
        !           931:      Like `-M' but the dependency information is written to files with
        !           932:      names made by replacing `.c' with `.d' at the end of the input
        !           933:      file names.  This is in addition to compiling the file as
        !           934:      specified--`-MD' does not inhibit ordinary compilation the way
        !           935:      `-M' does.
        !           936: 
        !           937:      In Mach, you can use the utility `md' to merge the `.d' files
        !           938:      into a single dependency file suitable for using with the `make'
        !           939:      command.
        !           940: 
        !           941: `-MMD'
        !           942:      Like `-MD' except mention only user header files, not system
        !           943:      header files.
        !           944: 
        !           945: `-H'
        !           946:      Print the name of each header file used, in addition to other
        !           947:      normal activities.
        !           948: 
        !           949: `-imacros FILE'
        !           950:      Process FILE as input, discarding the resulting output, before
        !           951:      processing the regular input file.  Because the output generated
        !           952:      from FILE is discarded, the only effect of `-imacros FILE' is to
        !           953:      make the macros defined in FILE available for use in the main
        !           954:      input.
        !           955: 
        !           956: `-include FILE'
        !           957:      Process FILE as input, and include all the resulting output,
        !           958:      before processing the regular input file.
        !           959: 
        !           960: `-lang-c'
        !           961: `-lang-c++'
        !           962: `-lang-objc'
        !           963: `-lang-objc++'
        !           964:      Specify the source language.  `-lang-c++' makes the preprocessor
        !           965:      handle C++ comment syntax, and includes extra default include
        !           966:      directories for C++, and `-lang-objc' enables the Objective C
        !           967:      `#import' directive.  `-lang-c' explicitly turns off both of
        !           968:      these extensions, and `-lang-objc++' enables both.
        !           969: 
        !           970:      These options are generated by the compiler driver `gcc', but not
        !           971:      passed from the `gcc' command line.
        !           972: 
        !           973: `-lint'
        !           974:      Look for commands to the program checker `lint' embedded in
        !           975:      comments, and emit them preceded by `#pragma lint'.  For example,
        !           976:      the comment `/* NOTREACHED */' becomes `#pragma lint NOTREACHED'.
        !           977: 
        !           978:      This option is available only when you call `cpp' directly; `gcc'
        !           979:      will not pass it from its command line.
        !           980: 
        !           981: `-$'
        !           982:      Forbid the use of `$' in identifiers.  This is required for ANSI
        !           983:      conformance.  `gcc' automatically supplies this option to the
        !           984:      preprocessor if you specify `-ansi', but `gcc' doesn't recognize
        !           985:      the `-$' option itself--to use it without the other effects of
        !           986:      `-ansi', you must call the preprocessor directly.
        !           987: 
        !           988: 
        !           989: File: cpp.info,  Node: Concept Index,  Next: Index,  Prev: Invocation,  Up: Top
        !           990: 
        !           991: Concept Index
        !           992: *************
        !           993: 
        !           994: * Menu:
        !           995: 
        !           996: * cascaded macros:                      Cascaded Macros.
        !           997: * commands:                             Commands.
        !           998: * concatenation:                        Concatenation.
        !           999: * conditionals:                         Conditionals.
        !          1000: * header file:                          Header Files.
        !          1001: * inheritance:                          Inheritance.
        !          1002: * line control:                         Combining Sources.
        !          1003: * macro body uses macro:                Cascaded Macros.
        !          1004: * null command:                         Other Commands.
        !          1005: * options:                              Invocation.
        !          1006: * output format:                        Output.
        !          1007: * overriding a header file:             Inheritance.
        !          1008: * predefined macros:                    Predefined.
        !          1009: * preprocessor commands:                Commands.
        !          1010: * redefining macros:                    Redefining.
        !          1011: * repeated inclusion:                   Once-Only.
        !          1012: * self-reference:                       Self-Reference.
        !          1013: * semicolons (after macro calls):       Swallow Semicolon.
        !          1014: * side effects (in macro arguments):    Side Effects.
        !          1015: * stringification:                      Stringification.
        !          1016: * undefining macros:                    Undefining.
        !          1017: * unsafe macros:                        Side Effects.
        !          1018: 
        !          1019: 
        !          1020: File: cpp.info,  Node: Index,  Prev: Concept Index,  Up: Top
        !          1021: 
        !          1022: Index of Commands, Macros and Options
        !          1023: *************************************
        !          1024: 
        !          1025: * Menu:
        !          1026: 
        !          1027: * #elif:                                #elif Command.
        !          1028: * #else:                                #else Command.
        !          1029: * #error:                               #error Command.
        !          1030: * #ident:                               Other Commands.
        !          1031: * #if:                                  Conditional Syntax.
        !          1032: * #ifdef:                               Conditionals-Macros.
        !          1033: * #ifndef:                              Conditionals-Macros.
        !          1034: * #include:                             Include Syntax.
        !          1035: * #include_next:                        Inheritance.
        !          1036: * #line:                                Combining Sources.
        !          1037: * #pragma:                              Other Commands.
        !          1038: * #pragma once:                         Once-Only.
        !          1039: * #warning:                             #error Command.
        !          1040: * -C:                                   Invocation.
        !          1041: * -D:                                   Invocation.
        !          1042: * -H:                                   Invocation.
        !          1043: * -I:                                   Invocation.
        !          1044: * -M:                                   Invocation.
        !          1045: * -MD:                                  Invocation.
        !          1046: * -MM:                                  Invocation.
        !          1047: * -MMD:                                 Invocation.
        !          1048: * -P:                                   Invocation.
        !          1049: * -U:                                   Invocation.
        !          1050: * -Wall:                                Invocation.
        !          1051: * -Wcomment:                            Invocation.
        !          1052: * -Wtraditional:                        Invocation.
        !          1053: * -dD:                                  Invocation.
        !          1054: * -dM:                                  Invocation.
        !          1055: * -imacros:                             Invocation.
        !          1056: * -include:                             Invocation.
        !          1057: * -pedantic:                            Invocation.
        !          1058: * -pedantic-errors:                     Invocation.
        !          1059: * -trigraphs:                           Invocation.
        !          1060: * -undef:                               Invocation.
        !          1061: * BSD:                                  Nonstandard Predefined.
        !          1062: * M68020:                               Nonstandard Predefined.
        !          1063: * _AM29000:                             Nonstandard Predefined.
        !          1064: * _AM29K:                               Nonstandard Predefined.
        !          1065: * __BASE_FILE__:                        Standard Predefined.
        !          1066: * __DATE__:                             Standard Predefined.
        !          1067: * __FILE__:                             Standard Predefined.
        !          1068: * __INCLUDE_LEVEL_:                     Standard Predefined.
        !          1069: * __LINE__:                             Standard Predefined.
        !          1070: * __STDC__:                             Standard Predefined.
        !          1071: * __TIME__:                             Standard Predefined.
        !          1072: * defined:                              Conditionals-Macros.
        !          1073: * m68k:                                 Nonstandard Predefined.
        !          1074: * mc68000:                              Nonstandard Predefined.
        !          1075: * ns32000:                              Nonstandard Predefined.
        !          1076: * pyr:                                  Nonstandard Predefined.
        !          1077: * sequent:                              Nonstandard Predefined.
        !          1078: * sun:                                  Nonstandard Predefined.
        !          1079: * system header files:                  Header Uses.
        !          1080: * unix:                                 Nonstandard Predefined.
        !          1081: * vax:                                  Nonstandard Predefined.
        !          1082: 
        !          1083: 

unix.superglobalmegacorp.com

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