|
|
1.1 ! root 1: ! 2: ! 3: File: cpp, Node: Top, Next: Global Actions, Up: (DIR) ! 4: ! 5: The C Preprocessor ! 6: ****************** ! 7: ! 8: The C preprocessor is a "macro processor" that is used automatically by the ! 9: C compiler to transform your program before actual compilation. It is ! 10: called a macro processor because it allows you to define "macros", which ! 11: are brief abbreviations for longer constructs. ! 12: ! 13: The C preprocessor provides four separate facilities that you can use as ! 14: you see fit: ! 15: ! 16: * Inclusion of header files. These are files of declarations that can ! 17: be substituted into your program. ! 18: ! 19: * Macro expansion. You can define "macros", which are abbreviations for ! 20: arbitrary fragments of C code, and then the C preprocessor will ! 21: replace the macros with their definitions throughout the program. ! 22: ! 23: * Conditional compilation. Using special preprocessor commands, you can ! 24: include or exclude parts of the program according to various conditions. ! 25: ! 26: * Line control. If you use a program to combine or rearrange source ! 27: files into an intermediate file which is then compiled, you can use ! 28: line control to inform the compiler of where each source line ! 29: originally came from. ! 30: ! 31: C preprocessors vary in some details. This manual discusses the GNU C ! 32: preprocessor, the C Compatible Compiler Preprocessor. The GNU C ! 33: preprocessor provides a superset of the features of ANSI Standard C. ! 34: ! 35: ANSI Standard C requires the rejection of many harmless constructs commonly ! 36: used by today's C programs. Such incompatibility would be inconvenient for ! 37: users, so the GNU C preprocessor is configured to accept these constructs ! 38: by default. Strictly speaking, to get ANSI Standard C, you must use the ! 39: options `-T', `-undef' and `-pedantic', but in practice the consequences of ! 40: having strict ANSI Standard C make it undesirable to do this. *note ! 41: Invocation::. ! 42: ! 43: * Menu: ! 44: ! 45: * Global Actions:: Actions made uniformly on all input files. ! 46: * Commands:: General syntax of preprocessor commands. ! 47: * Header Files:: How and why to use header files. ! 48: * Macros:: How and why to use macros. ! 49: * Conditionals:: How and why to use conditionals. ! 50: * Combining Sources:: Use of line control when you combine source files. ! 51: * Other Commands:: Miscellaneous preprocessor commands. ! 52: * Output:: Format of output from the C preprocessor. ! 53: * Invocation:: How to invoke the preprocessor; command options. ! 54: * Concept Index:: Index of concepts and terms. ! 55: * Index:: Index of commands, predefined macros and options. ! 56: ! 57: ! 58: ! 59: File: cpp, Node: Global Actions, Next: Commands, Prev: Top, Up: Top ! 60: ! 61: Transformations Made Globally ! 62: ============================= ! 63: ! 64: Most C preprocessor features are inactive unless you give specific commands ! 65: to request their use. (Preprocessor commands are lines starting with `#'; ! 66: *Note Commands::.). But there are three transformations that the ! 67: preprocessor always makes on all the input it receives, even in the absence ! 68: of commands. ! 69: ! 70: * All C comments are replaced with single spaces. ! 71: ! 72: * Backslash-Newline sequences are deleted, no matter where. This ! 73: feature allows you to break long lines for cosmetic purposes without ! 74: changing their meaning. ! 75: ! 76: * Predefined macro names are replaced with their expansions (*Note ! 77: Predefined::.). ! 78: ! 79: The first two transformations are done *before* nearly all other parsing ! 80: and before preprocessor commands are recognized. Thus, for example, you ! 81: can split a line cosmetically with Backslash-Newline anywhere (except when ! 82: trigraphs are in use; see below). ! 83: ! 84: /* ! 85: */ # /* ! 86: */ defi\ ! 87: ne FO\ ! 88: O 10\ ! 89: 20 ! 90: ! 91: is equivalent into `#define FOO 1020'. You can split even an escape ! 92: sequence with Backslash-Newline. For example, you can split `"foo\bar"' ! 93: between the `\' and the `b' to get ! 94: ! 95: "foo\\ ! 96: bar" ! 97: ! 98: This behavior is unclean: in all other contexts, a Backslash can be ! 99: inserted in a string constant as an ordinary character by writing a double ! 100: Backslash, and this creates an exception. But the ANSI C standard requires ! 101: it. (Strict ANSI C does not allow Newlines in string constants, so they do ! 102: not consider this a problem.) ! 103: ! 104: But there are a few exceptions to all three transformations. ! 105: ! 106: * C comments and predefined macro names are not recognized inside a ! 107: `#include' command in which the file name is delimited with `<' and `>'. ! 108: ! 109: * C comments and predefined macro names are never recognized within a ! 110: character or string constant. (Strictly speaking, this is the rule, ! 111: not an exception, but it is worth noting here anyway.) ! 112: ! 113: * Backslash-Newline may not safely be used within an ANSI ``trigraph''. ! 114: Trigraphs are converted before Backslash-Newline is deleted. If you ! 115: write what looks like a trigraph with a Backslash-Newline inside, the ! 116: Backslash-Newline is deleted as usual, but it is then too late to ! 117: recognize the trigraph. ! 118: ! 119: This exception is relevant only if you use the `-T' option to enable ! 120: trigraph processing. *note Invocation::. ! 121: ! 122: ! 123: File: cpp, Node: Commands, Next: Header Files, Prev: Global Actions, Up: Top ! 124: ! 125: Preprocessor Commands ! 126: ===================== ! 127: ! 128: Most preprocessor features are active only if you use preprocessor commands ! 129: to request their use. ! 130: ! 131: Preprocessor commands are lines in your program that start with `#'. The ! 132: `#' is followed by an identifier that is the "command name". For example, ! 133: `#define' is the command that defines a macro. Whitespace is also allowed ! 134: before and after the `#'. ! 135: ! 136: The set of valid command names is fixed. Programs cannot define new ! 137: preprocessor commands. ! 138: ! 139: Some command names require arguments; these make up the rest of the command ! 140: line and must be separated from the command name by whitespace. For ! 141: example, `#define' must be followed by a macro name and the intended ! 142: expansion of the macro. ! 143: ! 144: A preprocessor command cannot be more than one line in normal circumstances. ! 145: It may be split cosmetically with Backslash-Newline, but that has no ! 146: effect on its meaning. Comments containing Newlines can also divide the ! 147: command into multiple lines, but the comments are changed to Spaces before ! 148: the command is interpreted. The only way a significant Newline can occur ! 149: in a preprocessor command is within a string constant or character ! 150: constant. Note that most C compilers that might be applied to the output ! 151: from the preprocessor do not accept string or character constants ! 152: containing Newlines. ! 153: ! 154: The `#' and the command name cannot come from a macro expansion. For ! 155: example, if `foo' is defined as a macro expanding to `define', that does ! 156: not make `#foo' a valid preprocessor command. ! 157: ! 158: ! 159: File: cpp, Node: Header Files, Next: Macros, Prev: Commands, Up: Top ! 160: ! 161: Header Files ! 162: ============ ! 163: ! 164: A header file is a file containing C declarations and macro definitions ! 165: (*Note Macros::.) to be shared between several source files. You request ! 166: the use of a header file in your program with the C preprocessor command ! 167: `#include'. ! 168: ! 169: ! 170: File: cpp, Node: Header Uses, Next: Include Syntax, Prev: Header Files, Up: Header Files ! 171: ! 172: Uses of Header Files ! 173: -------------------- ! 174: ! 175: Header files serve two kinds of purposes. ! 176: ! 177: * System header files declare the interfaces to parts of the operating ! 178: system. You include them in your program to supply the definitions ! 179: you need to invoke system calls and libraries. ! 180: ! 181: * Your own header files contain declarations for interfaces between the ! 182: source files of your program. Each time you have a group of related ! 183: declarations and macro definitions all or most of which are needed in ! 184: several different source files, it is a good idea to create a header ! 185: file for them. ! 186: ! 187: Including a header file produces the same results in C compilation as ! 188: copying the header file into each source file that needs it. But such ! 189: copying would be time-consuming and error-prone. With a header file, the ! 190: related declarations appear in only one place. If they need to be changed, ! 191: they can be changed in one place, and programs that include the header file ! 192: will automatically use the new version when next recompiled. The header ! 193: file eliminates the labor of finding and changing all the copies as well as ! 194: the risk that a failure to find one copy will result in inconsistencies ! 195: within a program. ! 196: ! 197: The usual convention is to give header files names that end with `.h'. ! 198: ! 199: ! 200: File: cpp, Node: Include Syntax, Next: Include Operation, Prev: Header Uses, Up: Header Files ! 201: ! 202: The `#include' Command ! 203: ---------------------- ! 204: ! 205: Both user and system header files are included using the preprocessor ! 206: command `#include'. It has three variants: ! 207: ! 208: `#include <FILE>' ! 209: This variant is used for system header files. It searches for a file ! 210: named FILE in a list of directories specified by you, then in a ! 211: standard list of system directories. You specify directories to ! 212: search for header files with the command option `-I' (*Note ! 213: Invocation::.). The option `-nostdinc' inhibits searching the ! 214: standard system directories; in this case only the directories you ! 215: specify are searched. ! 216: ! 217: The parsing of this form of `#include' is slightly special because ! 218: comments are not recognized within the `<...>'. Thus, in `#include ! 219: <x/*y>' the `/*' does not start a comment and the command specifies ! 220: inclusion of a system header file named `x/*y'. Of course, a header ! 221: file with such a name is unlikely to exist on Unix, where shell ! 222: wildcard features would make it hard to manipulate. ! 223: ! 224: The argument FILE may not contain a `>' character. It may, however, ! 225: contain a `<' character. ! 226: ! 227: `#include "FILE"' ! 228: This variant is used for header files of your own program. It ! 229: searches for a file named FILE first in the current directory, then in ! 230: the same directories used for system header files. The current ! 231: directory is tried first because it is presumed to be the location of ! 232: the files of the program being compiled. (If the `-I-' option is ! 233: used, the special treatment of the current directory is inhibited.) ! 234: ! 235: The argument FILE may not contain `"' characters. If backslashes ! 236: occur within FILE, they are considered ordinary text characters, not ! 237: escape characters. None of the character escape sequences appropriate ! 238: to string constants in C are processed. Thus, `#include "x\n\\y"' ! 239: specifies a filename containing three backslashes. It is not clear ! 240: why this behavior is ever useful, but the ANSI standard specifies it. ! 241: ! 242: `#include ANYTHING ELSE' ! 243: This variant is called a "computed #include". Any `#include' command ! 244: whose argument does not fit the above two forms is a computed include. ! 245: The text ANYTHING ELSE is checked for macro calls, which are expanded ! 246: (*Note Macros::.). When this is done, the result must fit one of the ! 247: above two variants. ! 248: ! 249: This feature allows you to define a macro which controls the file name ! 250: to be used at a later point in the program. One application of this ! 251: is to allow a site-configuration file for your program to specify the ! 252: names of the system include files to be used. This can help in ! 253: porting the program to various operating systems in which the ! 254: necessary system header files are found in different places. ! 255: ! 256: ! 257: File: cpp, Node: Include Operation, Prev: Include Syntax, Up: Header Files ! 258: ! 259: How `#include' Works ! 260: -------------------- ! 261: ! 262: The `#include' command works by directing the C preprocessor to scan the ! 263: specified file as input before continuing with the rest of the current ! 264: file. The output from the preprocessor contains the output already ! 265: generated, followed by the output resulting from the included file, ! 266: followed by the output that comes from the text after the `#include' ! 267: command. For example, given two files as follows: ! 268: ! 269: /* File program.c */ ! 270: int x; ! 271: #include "header.h" ! 272: ! 273: main () ! 274: { ! 275: printf (test ()); ! 276: } ! 277: ! 278: ! 279: /* File header.h */ ! 280: char *test (); ! 281: ! 282: the output generated by the C preprocessor for `program.c' as input would be ! 283: ! 284: int x; ! 285: char *test (); ! 286: ! 287: main () ! 288: { ! 289: printf (test ()); ! 290: } ! 291: ! 292: Included files are not limited to declarations and macro definitions; they ! 293: are merely the typical use. Any fragment of a C program can be included ! 294: from another file. The include file could even contain the beginning of a ! 295: statement that is concluded in the containing file, or the end of a ! 296: statement that was started in the including file. However, a comment or a ! 297: string or character constant may not start in the included file and finish ! 298: in the including file. An unterminated comment, string constant or ! 299: character constant in an included file is considered to end (with an error ! 300: message) at the end of the file. ! 301: ! 302: The line following the `#include' command is always treated as a separate ! 303: line by the C preprocessor even if the included file lacks a final newline. ! 304: ! 305: ! 306: File: cpp, Node: Macros, Next: Conditionals, Prev: Header Files, Up: Top ! 307: ! 308: Macros ! 309: ====== ! 310: ! 311: A macro is a sort of abbreviation which you can define once and then use ! 312: later. There are many complicated features associated with macros in the C ! 313: preprocessor. ! 314: ! 315: * Menu: ! 316: ! 317: * Simple Macros:: Macros that always expand the same way. ! 318: * Argument Macros:: Macros that accept arguments that are substituted ! 319: into the macro expansion. ! 320: * Predefined:: Predefined macros that are always available. ! 321: * Stringification:: Macro arguments converted into string constants. ! 322: * Concatenation:: Building tokens from parts taken from macro arguments. ! 323: * Undefining:: Cancelling a macro's definition. ! 324: * Redefining:: Changing a macro's definition. ! 325: * Macro Pitfalls:: Macros can confuse the unwary. Here we explain ! 326: several common problems and strange features. ! 327: ! 328: ! 329: ! 330: File: cpp, Node: Simple Macros, Next: Argument Macros, Prev: Macros, Up: Macros ! 331: ! 332: Simple Macros ! 333: ------------- ! 334: ! 335: A "simple macro" is a kind of abbreviation. It is a name which stands for ! 336: a fragment of code. ! 337: ! 338: Before you can use a macro, you must "define" it explicitly with the ! 339: `#define' command. `#define' is followed by the name of the macro and then ! 340: the code it should be an abbreviation for. For example, ! 341: ! 342: #define BUFFER_SIZE 1020 ! 343: ! 344: defines a macro named `BUFFER_SIZE' as an abbreviation for the text `1020'. ! 345: Therefore, if somewhere after this `#define' command there comes a C ! 346: statement of the form ! 347: ! 348: foo = (char *) xmalloc (BUFFER_SIZE); ! 349: ! 350: then the C preprocessor will recognize and "expand" the macro ! 351: `BUFFER_SIZE', resulting in ! 352: ! 353: foo = (char *) xmalloc (1020); ! 354: ! 355: the definition must be a single line; however, it may not end in the middle ! 356: of a multi-line string constant or character constant. ! 357: ! 358: The use of all upper case for macro names is a standard convention. ! 359: Programs are easier to read when it is possible to tell at a glance which ! 360: names are macros. ! 361: ! 362: Normally, a macro definition must be a single line, like all C preprocessor ! 363: commands. (You can split a long macro definition cosmetically with ! 364: Backslash-Newline.) There is one exception: Newlines can be included in ! 365: the macro definition if within a string or character constant. By the same ! 366: token, it is not possible for a macro definition to contain an unbalanced ! 367: quote character; the definition automatically extends to include the ! 368: matching quote character that ends the string or character constant. ! 369: Comments within a macro definition may contain Newlines, which make no ! 370: difference since the comments are entirely replaced with Spaces regardless ! 371: of their contents. ! 372: ! 373: Aside from the above, there is no restriction on what can go in a macro ! 374: body. Parentheses need not balance. The body need not resemble valid C ! 375: code. (Of course, you might get error messages from the C compiler when ! 376: you use the macro.) ! 377: ! 378: The C preprocessor scans your program sequentially, so macro definitions ! 379: take effect at the place you write them. Therefore, the following input to ! 380: the C preprocessor ! 381: ! 382: foo = X; ! 383: #define X 4 ! 384: bar = X; ! 385: ! 386: produces as output ! 387: ! 388: foo = X; ! 389: ! 390: bar = 4; ! 391: ! 392: After the preprocessor expands a macro name, the macro's definition body is ! 393: appended to the front of the remaining input, and the check for macro calls ! 394: continues. Therefore, the macro body can contain calls to other macros. ! 395: For example, after ! 396: ! 397: #define BUFSIZE 1020 ! 398: #define TABLESIZE BUFSIZE ! 399: ! 400: the name `TABLESIZE' when used in the program would go through two stages ! 401: of expansion, resulting ultimately in `1020'. ! 402: ! 403: This is not at all the same as defining `TABLESIZE' to be `1020'. The ! 404: `#define' for `TABLESIZE' uses exactly the body you specify---in this case, ! 405: `BUFSIZE'---and does not check to see whether it too is the name of a ! 406: macro. It's only when you *use* `TABLESIZE' that the result of its ! 407: expansion is checked for more macro names. *note Cascaded Macros::. ! 408: ! 409: ! 410: File: cpp, Node: Argument Macros, Next: Predefined, Prev: Simple Macros, Up: Macros ! 411: ! 412: Macros with Arguments ! 413: --------------------- ! 414: ! 415: A simple macro always stands for exactly the same text, each time it is ! 416: used. Macros can be more flexible when they accept "arguments". Arguments ! 417: are fragments of code that you supply each time the macro is used. These ! 418: fragments are included in the expansion of the macro according to the ! 419: directions in the macro definition. ! 420: ! 421: To define a macro that uses arguments, you write a `#define' command with a ! 422: list of "argument names" in parentheses after the name of the macro. The ! 423: argument names may be any valid C identifiers, separated by commas and ! 424: optionally whitespace. The open-parenthesis must follow the macro name ! 425: immediately, with no space in between. ! 426: ! 427: For example, here is a macro that computes the minimum of two numeric ! 428: values, as it is defined in many C programs: ! 429: ! 430: #define min(X, Y) ((X) < (Y) ? (X) : (Y)) ! 431: ! 432: (This is not the best way to define a ``minimum'' macro in GNU C. *note ! 433: Side Effects::, for more information.) ! 434: ! 435: To use a macro that expects arguments, you write the name of the macro ! 436: followed by a list of "actual arguments" in parentheses. separated by ! 437: commas. The number of actual arguments you give must match the number of ! 438: arguments the macro expects. Examples of use of the macro `min' include ! 439: `min (1, 2)' and `min (x + 28, *p)'. ! 440: ! 441: The expansion text of the macro depends on the arguments you use. Each of ! 442: the argument names of the macro is replaced, throughout the macro ! 443: definition, with the corresponding actual argument. Using the same macro ! 444: `min' defined above, `min (1, 2)' expands into ! 445: ! 446: ((1) < (2) ? (1) : (2)) ! 447: ! 448: where `1' has been substituted for `X' and `2' for `Y'. ! 449: ! 450: Likewise, `min (x + 28, *p)' expands into ! 451: ! 452: ((x + 28) < (*p) ? (x + 28) : (*p)) ! 453: ! 454: Parentheses in the actual arguments must balance; a comma within ! 455: parentheses does not end an argument. However, there is no requirement for ! 456: brackets or braces to balance; thus, if you want to supply `array[x = y, x ! 457: + 1]' as an argument, you must write it as `array[(x = y, x + 1)]', which ! 458: is equivalent C code. ! 459: ! 460: After the actual arguments are substituted into the macro body, the entire ! 461: result is appended to the front of the remaining input, and the check for ! 462: macro calls continues. Therefore, the actual arguments can contain calls ! 463: to other macros, either with or without arguments, or even to the same ! 464: macro. The macro body can also contain calls to other macros. For ! 465: example, `min (min (a, b), c)' expands into ! 466: ! 467: ((((a) < (b) ? (a) : (b))) < (c) ! 468: ? (((a) < (b) ? (a) : (b))) ! 469: : (c)) ! 470: ! 471: (Line breaks shown here for clarity would not actually be generated.) ! 472: ! 473: If you use the macro name followed by something other than an ! 474: open-parenthesis (after ignoring any spaces, tabs and comments that ! 475: follow), it is not a call to the macro, and the preprocessor does not ! 476: change what you have written. Therefore, it is possible for the same name ! 477: to be a variable or function in your program as well as a macro, and you ! 478: can choose in each instance whether to refer to the macro (if an actual ! 479: argument list follows) or the variable or function (if an argument list ! 480: does not follow). ! 481: ! 482: Such dual use of one name could be confusing and should be avoided except ! 483: when the two meanings are effectively synonymous: that is, when the name is ! 484: both a macro and a function and the two have similar effects. You can ! 485: think of the name simply as a function; use of the name for purposes other ! 486: than calling it (such as, to take the address) will refer to the function, ! 487: while calls will expand the macro and generate better but equivalent code. ! 488: For example, you can use a function named `min' in the same source file ! 489: that defines the macro. If you write `&min' with no argument list, you ! 490: refer to the function. If you write `min (x, bb)', with an argument list, ! 491: the macro is expanded. If you write `(min) (a, bb)', where the name `min' ! 492: is not followed by an open-parenthesis, the macro is not expanded, so you ! 493: wind up with a call to the function `min'. ! 494: ! 495: It is not allowed to define the same name as both a simple macro and a ! 496: macro with arguments. ! 497: ! 498: In the definition of a macro with arguments, the list of argument names ! 499: must follow the macro name immediately with no space in between. If there ! 500: is a space after the macro name, the macro is defined as taking no ! 501: arguments, and all the rest of the name is taken to be the expansion. The ! 502: reason for this is that it is often useful to define a macro that takes no ! 503: arguments and whose definition begins with an identifier in parentheses. ! 504: This rule about spaces makes it possible for you to do either this: ! 505: ! 506: #define FOO(x) - 1 / (x) ! 507: ! 508: (which defines `FOO' to take an argument and expand into minus the ! 509: reciprocal of that argument) or this: ! 510: ! 511: #define BAR (x) - 1 / (x) ! 512: ! 513: (which defines `BAR' to take no argument and always expand into `(x) - 1 / ! 514: (x)'). ! 515: ! 516: Note that the *uses* of a macro with arguments can have spaces before the ! 517: left parenthesis; it's the *definition* where it matters whether there is a ! 518: space. ! 519: ! 520: ! 521: File: cpp, Node: Predefined, Next: Stringification, Prev: Argument Macros, Up: Macros ! 522: ! 523: Predefined Macros ! 524: ----------------- ! 525: ! 526: Several simple macros are predefined. You can use them without giving ! 527: definitions for them. They fall into two classes: standard macros and ! 528: system-specific macros. ! 529: ! 530: * Menu: ! 531: ! 532: * Standard Predefined:: Standard predefined macros. ! 533: * Nonstandard Predefined:: Nonstandard predefined macros. ! 534: ! 535: ! 536: ! 537: File: cpp, Node: Standard Predefined, Next: Nonstandard Predefined, Prev: Predefined, Up: Predefined ! 538: ! 539: Standard Predefined Macros ! 540: .......................... ! 541: ! 542: The standard predefined macros are available with the same meanings ! 543: regardless of the machine or operating system on which you are using GNU C. ! 544: Their names all start and end with double underscores. Those preceding ! 545: `__GNUC__' in this table are standardized by ANSI C; the rest are GNU C ! 546: extensions. ! 547: ! 548: `__FILE__' ! 549: This macro expands to the name of the current input file, in the form ! 550: of a C string constant. ! 551: ! 552: `__LINE__' ! 553: This macro expands to the current input line number, in the form of a ! 554: decimal integer constant. While we call it a predefined macro, it's a ! 555: pretty strange macro, since its ``definition'' changes with each new ! 556: line of source code. ! 557: ! 558: This and `__FILE__' are useful in generating an error message to ! 559: report an inconsistency detected by the program; the message can state ! 560: the source line at which the inconsistency was detected. For example, ! 561: ! 562: fprintf (stderr, "Internal error: negative string length " ! 563: "%d at %s, line %d.", ! 564: length, __FILE__, __LINE__); ! 565: ! 566: A `#include' command changes the expansions of `__FILE__' and ! 567: `__LINE__' to correspond to the included file. At the end of that ! 568: file, when processing resumes on the input file that contained the ! 569: `#include' command, the expansions of `__FILE__' and `__LINE__' revert ! 570: to the values they had before the `#include' (but `__LINE__' is then ! 571: incremented by one as processing moves to the line after the ! 572: `#include'). ! 573: ! 574: The expansions of both `__FILE__' and `__LINE__' are altered if a ! 575: `#line' command is used. *note Combining Sources::. ! 576: ! 577: `__DATE__' ! 578: This macro expands to a string constant that describes the date on ! 579: which the preprocessor is being run. The string constant contains ! 580: eleven characters and looks like `"Jan 29 1987"' or `"Apr 1 1905"'. ! 581: ! 582: `__TIME__' ! 583: This macro expands to a string constant that describes the time at ! 584: which the preprocessor is being run. The string constant contains ! 585: eight characters and looks like `"23:59:01"'. ! 586: ! 587: `__STDC__' ! 588: This macro expands to the constant 1, to signify that this is ANSI ! 589: Standard C. (Whether that is actually true depends on what C compiler ! 590: will operate on the output from the preprocessor.) ! 591: ! 592: `__GNUC__' ! 593: This macro is defined if and only if this is GNU C. This macro is ! 594: defined only when the entire GNU C compiler is in use; if you invoke ! 595: the preprocessor directly, `__GNUC__' is undefined. ! 596: ! 597: `__STRICT_ANSI__' ! 598: This macro is defined if and only if the `-ansi' switch was specified ! 599: when GNU C was invoked. Its definition is the null string. This ! 600: macro exists primarily to direct certain GNU header files not to ! 601: define certain traditional Unix constructs which are incompatible with ! 602: ANSI C. ! 603: ! 604: `__VERSION__' ! 605: This macro expands to a string which describes the version number of ! 606: GNU C. The string is normally a sequence of decimal numbers separated ! 607: by periods, such as `"1.18"'. The only reasonable use of this macro ! 608: is to incorporate it into a string constant. ! 609: ! 610: `__OPTIMIZE__' ! 611: This macro is defined in optimizing compilations. It causes certain ! 612: GNU header files to define alternative macro definitions for some ! 613: system library functions. It is unwise to refer to or test the ! 614: definition of this macro unless you make very sure that programs will ! 615: execute with the same effect regardless. ! 616: ! 617: `__CHAR_UNSIGNED__' ! 618: This macro is defined if and only if the data type `char' is unsigned ! 619: on the target machine. It exists to cause the standard header file ! 620: `limit.h' to work correctly. It is bad practice to refer to this ! 621: macro yourself; instead, refer to the standard macros defined in ! 622: `limit.h'. ! 623: ! 624: ! 625: File: cpp, Node: Nonstandard Predefined, Prev: Standard Predefined, Up: Predefined ! 626: ! 627: Nonstandard Predefined Macros ! 628: ............................. ! 629: ! 630: The C preprocessor normally has several predefined macros that vary between ! 631: machines because their purpose is to indicate what type of system and ! 632: machine is in use. This manual, being for all systems and machines, cannot ! 633: tell you exactly what their names are; instead, we offer a list of some ! 634: typical ones. ! 635: ! 636: Some nonstandard predefined macros describe the operating system in use, ! 637: with more or less specificity. For example, ! 638: ! 639: `unix' ! 640: `unix' is normally predefined on all Unix systems. ! 641: ! 642: `BSD' ! 643: `BSD' is predefined on recent versions of Berkeley Unix (perhaps only ! 644: in version 4.3). ! 645: ! 646: Other nonstandard predefined macros describe the kind of CPU, with more or ! 647: less specificity. For example, ! 648: ! 649: `vax' ! 650: `vax' is predefined on Vax computers. ! 651: ! 652: `mc68000' ! 653: `mc68000' is predefined on most computers whose CPU is a Motorola ! 654: 68000, 68010 or 68020. ! 655: ! 656: `m68k' ! 657: `m68k' is also predefined on most computers whose CPU is a 68000, ! 658: 68010 or 68020; however, some makers use `mc68000' and some use ! 659: `m68k'. Some predefine both names. What happens in GNU C depends on ! 660: the system you are using it on. ! 661: ! 662: `M68020' ! 663: `M68020' has been observed to be predefined on some systems that use ! 664: 68020 CPUs---in addition to `mc68000' and `m68k' that are less specific. ! 665: ! 666: `ns32000' ! 667: `ns32000' is predefined on computers which use the National ! 668: Semiconductor 32000 series CPU. ! 669: ! 670: Yet other nonstandard predefined macros describe the manufacturer of the ! 671: system. For example, ! 672: ! 673: `sun' ! 674: `sun' is predefined on all models of Sun computers. ! 675: ! 676: `pyr' ! 677: `pyr' is predefined on all models of Pyramid computers. ! 678: ! 679: `sequent' ! 680: `sequent' is predefined on all models of Sequent computers. ! 681: ! 682: These predefined symbols are not only nonstandard, they are contrary to the ! 683: ANSI standard because their names do not start with underscores. However, ! 684: the GNU C preprocessor would be useless if it did not predefine the same ! 685: names that are normally predefined on the system and machine you are using. ! 686: Even system header files check the predefined names and will generate ! 687: incorrect declarations if they do not find the names that are expected. ! 688: ! 689: The set of nonstandard predefined names in the GNU C preprocessor is ! 690: controlled by the macro `CPP_PREDEFINES', which should be a string ! 691: containing `-D' options, separated by spaces. For example, on the Sun, the ! 692: definition ! 693: ! 694: #define CPP_PREDEFINES "-Dmc68000 -Dsun -Dunix -Dm68k" ! 695: ! 696: is used. ! 697: ! 698: The `-ansi' option which requests complete support for ANSI C inhibits the ! 699: definition of these predefined symbols. ! 700: ! 701: ! 702: File: cpp, Node: Stringification, Next: Concatenation, Prev: Predefined, Up: Macros ! 703: ! 704: Stringification ! 705: --------------- ! 706: ! 707: "Stringification" means turning a code fragment into a string constant ! 708: whose contents are the text for the code fragment. For example, ! 709: stringifying `foo (z)' results in `"foo (z)"'. ! 710: ! 711: In the C preprocessor, stringification is an option available when macro ! 712: arguments are substituted into the macro definition. In the body of the ! 713: definition, when an argument name appears, the character `#' before the ! 714: name specifies stringification of the corresponding actual argument when it ! 715: is substituted at that point in the definition. The same argument may be ! 716: substituted in other places in the definition without stringification if ! 717: the argument name appears in those places with no `#'. ! 718: ! 719: Here is an example of a macro definition that uses stringification: ! 720: ! 721: #define WARN_IF(EXP) \ ! 722: do { if (EXP) fprintf (stderr, "Warning: " #EXP "\n"); } while (0) ! 723: ! 724: Here the actual argument for `EXP' is substituted once as given, into the ! 725: `if' statement, and once as stringified, into the argument to `fprintf'. ! 726: The `do' and `while (0)' are a kludge to make it possible to write `WARN_IF ! 727: (ARG);', which the resemblance of `WARN_IF' to a function would make C ! 728: programmers want to do; *Note Swallow Semicolon::.). ! 729: ! 730: The stringification feature is limited to transforming one macro argument ! 731: into one string constant: there is no way to combine the argument with ! 732: other text and then stringify it all together. But the example above shows ! 733: how an equivalent result can be obtained in ANSI Standard C using the ! 734: feature that adjacent string constants are concatenated as one string ! 735: constant. The preprocessor stringifies `EXP''s actual argument into a ! 736: separate string constant, resulting in text like ! 737: ! 738: do { if (x == 0) fprintf (stderr, "Warning: " "x == 0" "\n"); } while (0) ! 739: ! 740: but the C compiler then sees three consecutive string constants and ! 741: concatenates them into one, producing effectively ! 742: ! 743: do { if (x == 0) fprintf (stderr, "Warning: x == 0\n"); } while (0) ! 744: ! 745: Stringification in C involves more than putting doublequote characters ! 746: around the fragment; it is necessary to put backslashes in front of all ! 747: doublequote characters, and all backslashes in string and character ! 748: constants, in order to get a valid C string constant with the proper ! 749: contents. Thus, stringifying `p = "foo\n";' results in `"p = ! 750: \"foo\\n\";"'. However, backslashes that are not inside of string or ! 751: character constants are not duplicated: `\n' by itself stringifies to `"\n"'. ! 752: ! 753: Whitespace (including comments) in the text being stringified is handled ! 754: according to precise rules. All leading and trailing whitespace is ignored. ! 755: Any sequence of whitespace in the middle of the text is converted to a ! 756: single space in the stringified result. ! 757: ! 758: ! 759: File: cpp, Node: Concatenation, Next: Undefining, Prev: Stringification, Up: Macros ! 760: ! 761: Concatenation ! 762: ------------- ! 763: ! 764: "Concatenation" means joining two strings into one. In the context of ! 765: macro expansion, concatenation refers to joining two lexical units into one ! 766: longer one. Specifically, an actual argument to the macro can be ! 767: concatenated with another actual argument or with fixed text to produce a ! 768: longer name. The longer name might be the name of a function, variable or ! 769: type, or a C keyword; it might even be the name of another macro, in which ! 770: case it will be expanded. ! 771: ! 772: When you define a macro, you request concatenation with the special ! 773: operator `##' in the macro body. When the macro is called, after actual ! 774: arguments are substituted, all `##' operators are deleted, and so is any ! 775: whitespace next to them (including whitespace that was part of an actual ! 776: argument). The result is to concatenate the syntactic tokens on either ! 777: side of the `##'. ! 778: ! 779: Consider a C program that interprets named commands. There probably needs ! 780: to be a table of commands, perhaps an array of structures declared as ! 781: follows: ! 782: ! 783: struct command ! 784: { ! 785: char *name; ! 786: void (*function) (); ! 787: }; ! 788: ! 789: struct command commands[] = ! 790: { ! 791: { "quit", quit_command}, ! 792: { "help", help_command}, ! 793: ... ! 794: }; ! 795: ! 796: It would be cleaner not to have to give each command name twice, once in ! 797: the string constant and once in the function name. A macro which takes the ! 798: name of a command as an argument can make this unnecessary. The string ! 799: constant can be created with stringification, and the function name by ! 800: concatenating the argument with `_command'. Here is how it is done: ! 801: ! 802: #define COMMAND(NAME) { #NAME, NAME ## _command } ! 803: ! 804: struct command commands[] = ! 805: { ! 806: COMMAND (quit), ! 807: COMMAND (help), ! 808: ... ! 809: }; ! 810: ! 811: The usual case of concatenation is concatenating two names (or a name and a ! 812: number) into a longer name. But this isn't the only valid case. It is ! 813: also possible to concatenate two numbers (or a number and a name, such as ! 814: `1.5' and `e3') into a number. Also, multi-character operators such as ! 815: `+=' can be formed by concatenation. In some cases it is even possible to ! 816: piece together a string constant. However, two pieces of text that don't ! 817: together form a valid lexical unit cannot be concatenated. For example, ! 818: concatenation with `x' on one side and `+' on the other is not meaningful ! 819: because those two characters can't fit together in any lexical unit of C. ! 820: The ANSI standard says that such attempts at concatenation are undefined, ! 821: but in the GNU C preprocessor it is well defined: it puts the `x' and `+' ! 822: side by side with no particular special results. ! 823: ! 824: Keep in mind that the C preprocessor converts comments to whitespace before ! 825: macros are even considered. Therefore, you cannot create a comment by ! 826: concatenating `/' and `*': the `/*' sequence that starts a comment is not a ! 827: lexical unit, but rather the beginning of a ``long'' space character. ! 828: Also, you can freely use comments next to a `##' in a macro definition, or ! 829: in actual arguments that will be concatenated, because the comments will be ! 830: converted to spaces at first sight, and concatenation will later discard ! 831: the spaces. ! 832: ! 833: ! 834: File: cpp, Node: Undefining, Next: Redefining, Prev: Concatenation, Up: Macros ! 835: ! 836: Undefining Macros ! 837: ----------------- ! 838: ! 839: To "undefine" a macro means to cancel its definition. This is done with ! 840: the `#undef' command. `#undef' is followed by the macro name to be ! 841: undefined. ! 842: ! 843: Like definition, undefinition occurs at a specific point in the source ! 844: file, and it applies starting from that point. The name ceases to be a ! 845: macro name, and from that point on it is treated by the preprocessor as if ! 846: it had never been a macro name. ! 847: ! 848: For example, ! 849: ! 850: #define FOO 4 ! 851: x = FOO; ! 852: #undef FOO ! 853: x = FOO; ! 854: ! 855: expands into ! 856: ! 857: x = 4; ! 858: ! 859: x = FOO; ! 860: ! 861: In this example, `FOO' had better be a variable or function as well as ! 862: (temporarily) a macro, in order for the result of the expansion to be valid ! 863: C code. ! 864: ! 865: The same form of `#undef' command will cancel definitions with arguments or ! 866: definitions that don't expect arguments. The `#undef' command has no ! 867: effect when used on a name not currently defined as a macro. ! 868: ! 869: ! 870: File: cpp, Node: Redefining, Next: Macro Pitfalls, Prev: Undefining, Up: Macros ! 871: ! 872: Redefining Macros ! 873: ----------------- ! 874: ! 875: "Redefining" a macro means defining (with `#define') a name that is already ! 876: defined as a macro. ! 877: ! 878: A redefinition is trivial if the new definition is transparently identical ! 879: to the old one. You probably wouldn't deliberately write a trivial ! 880: redefinition, but they can happen automatically when a header file is ! 881: included more than once (*Note Header Files::.), so they are accepted ! 882: silently and without effect. ! 883: ! 884: Nontrivial redefinition is considered likely to be an error, so it provokes ! 885: a warning message from the preprocessor. However, sometimes it is useful ! 886: to change the definition of a macro in mid-compilation. You can inhibit ! 887: the warning by undefining the macro with `#undef' before the second ! 888: definition. ! 889: ! 890: In order for a reefinition to be trivial, the new definition must exactly ! 891: match the one already in effect, with two possible exceptions: ! 892: ! 893: * Whitespace may be added or deleted at the beginning or the end. ! 894: ! 895: * Whitespace may be changed in the middle (but not inside strings). ! 896: However, it may not be eliminated entirely, and it may not be added ! 897: where there was no whitespace at all. ! 898: ! 899: Recall that a comment counts as whitespace. ! 900: ! 901: ! 902: File: cpp, Node: Macro Pitfalls, Prev: Redefining, Up: Macros ! 903: ! 904: Pitfalls and Subtleties of Macros ! 905: --------------------------------- ! 906: ! 907: In this section we describe some special rules that apply to macros and ! 908: macro expansion, and point out certain cases in which the rules have ! 909: counterintuitive consequences that you must watch out for. ! 910: ! 911: * Menu: ! 912: ! 913: * Misnesting:: Macros can contain unmatched parentheses. ! 914: * Macro Parentheses:: Why apparently superfluous parentheses ! 915: may be necessary to avoid incorrect grouping. ! 916: * Swallow Semicolon:: Macros that look like functions ! 917: but expand into compound statements. ! 918: * Side Effects:: Unsafe macros that cause trouble when ! 919: arguments contain side effects. ! 920: * Self-Reference:: Macros whose definitions use the macros' own names. ! 921: * Argument Prescan:: Actual arguments are checked for macro calls ! 922: before they are substituted. ! 923: * Cascaded Macros:: Macros whose definitions use other macros. ! 924: ! 925: ! 926: ! 927: File: cpp, Node: Misnesting, Next: Macro Parentheses, Prev: Macro Pitfalls, Up: Macro Pitfalls ! 928: ! 929: Improperly Nested Constructs ! 930: ............................ ! 931: ! 932: Recall that when a macro is called with arguments, the arguments are ! 933: substituted into the macro body and the result is checked, together with ! 934: the rest of the input file, for more macro calls. ! 935: ! 936: It is possible to piece together a macro call coming partially from the ! 937: macro body and partially from the actual arguments. For example, ! 938: ! 939: #define double(x) (2*(x)) ! 940: #define call_with_1(x) x(1) ! 941: ! 942: would expand `call_with_1 (double)' into `(2*(1))'. ! 943: ! 944: Macro definitions do not have to have balanced parentheses. By writing an ! 945: unbalanced open parenthesis in a macro body, it is possible to create a ! 946: macro call that begins inside the macro body but ends outside of it. For ! 947: example, ! 948: ! 949: #define strange(file) fprintf (file, "%s %d", ! 950: ... ! 951: strange(stderr) p, 35) ! 952: ! 953: This bizarre example expands to `fprintf (stderr, "%s %d", p, 35)'! ! 954: ! 955: ! 956: File: cpp, Node: Macro Parentheses, Next: Swallow Semicolon, Prev: Misnesting, Up: Macro Pitfalls ! 957: ! 958: Unintended Grouping of Arithmetic ! 959: ................................. ! 960: ! 961: You may have noticed that in most of the macro definition examples shown ! 962: above, each occurrence of a macro argument name had parentheses around it. ! 963: In addition, another pair of parentheses usually surround the entire macro ! 964: definition. Here is why it is best to write macros that way. ! 965: ! 966: Suppose you define a macro as follows ! 967: ! 968: #define ceil_div(x, y) (x + y - 1) / y ! 969: ! 970: whose purpose is to divide, rounding up. (One use for this operation is to ! 971: compute how many `int''s are needed to hold a certain number of `char''s.) ! 972: Then suppose it is used as follows: ! 973: ! 974: a = ceil_div (b & c, sizeof (int)); ! 975: ! 976: This expands into ! 977: ! 978: a = (b & c + sizeof (int) - 1) / sizeof (int); ! 979: ! 980: which does not do what is intended. The operator-precedence rules of C ! 981: make it equivalent to this: ! 982: ! 983: a = (b & (c + sizeof (int) - 1)) / sizeof (int); ! 984: ! 985: But what we want is this: ! 986: ! 987: a = ((b & c) + sizeof (int) - 1)) / sizeof (int); ! 988: ! 989: Defining the macro as ! 990: ! 991: #define ceil_div(x, y) ((x) + (y) - 1) / (y) ! 992: ! 993: provides the desired result. ! 994: ! 995: However, unintended grouping can result in another way. Consider `sizeof ! 996: ceil_div(1, 2)'. That has the appearance of a C expression that would ! 997: compute the size of the type of `ceil_div (1, 2)', but in fact it means ! 998: something very different. Here is what it expands to: ! 999: ! 1000: sizeof ((1) + (2) - 1) / (2) ! 1001: ! 1002: This would take the size of an integer and divide it by two. The ! 1003: precedence rules have put the division outside the `sizeof' when it was ! 1004: intended to be inside. ! 1005: ! 1006: Parentheses around the entire macro definition can prevent such problems. ! 1007: Here, then, is the recommended way to define `ceil_div': ! 1008: ! 1009: #define ceil_div(x, y) (((x) + (y) - 1) / (y)) ! 1010: ! 1011: ! 1012: File: cpp, Node: Swallow Semicolon, Next: Side Effects, Prev: Macro Parentheses, Up: Macro Pitfalls ! 1013: ! 1014: Swallowing the Semicolon ! 1015: ........................ ! 1016: ! 1017: Often it is desirable to define a macro that expands into a compound ! 1018: statement. Consider, for example, the following macro, that advances a ! 1019: pointer (the argument `p' says where to find it) across whitespace ! 1020: characters: ! 1021: ! 1022: #define SKIP_SPACES (p, limit) \ ! 1023: { register char *lim = (limit); \ ! 1024: while (p != lim) { \ ! 1025: if (*p++ != ' ') { \ ! 1026: p--; break; }}} ! 1027: ! 1028: Here Backslash-Newline is used to split the macro definition, which must be ! 1029: a single line, so that it resembles the way such C code would be layed out ! 1030: if not part of a macro definition. ! 1031: ! 1032: A call to this macro might be `SKIP_SPACES (p, lim)'. Strictly speaking, ! 1033: the call expands to a compound statement, which is a complete statement ! 1034: with no need for a semicolon to end it. But it looks like a function call. ! 1035: So it minimizes confusion if you can use it like a function call, writing ! 1036: a semicolon afterward, as in `SKIP_SPACES (p, lim);' ! 1037: ! 1038: But this can cause trouble before `else' statements, because the semicolon ! 1039: is actually a null statement. Suppose you write ! 1040: ! 1041: if (*p != 0) ! 1042: SKIP_SPACES (p, lim); ! 1043: else ... ! 1044: ! 1045: The presence of two statements---the compound statement and a null ! 1046: statement---in between the `if' condition and the `else' makes invalid C ! 1047: code. ! 1048: ! 1049: The definition of the macro `SKIP_SPACES' can be altered to solve this ! 1050: problem, using a `do ... while' statement. Here is how: ! 1051: ! 1052: #define SKIP_SPACES (p, limit) \ ! 1053: do { register char *lim = (limit); \ ! 1054: while (p != lim) { \ ! 1055: if (*p++ != ' ') { \ ! 1056: p--; break; }}} \ ! 1057: while (0) ! 1058: ! 1059: Now `SKIP_SPACES (p, lim);' expands into ! 1060: ! 1061: do {...} while (0); ! 1062: ! 1063: which is one statement. ! 1064: ! 1065: ! 1066: File: cpp, Node: Side Effects, Next: Self-Reference, Prev: Swallow Semicolon, Up: Macro Pitfalls ! 1067: ! 1068: Duplication of Side Effects ! 1069: ........................... ! 1070: ! 1071: Many C programs define a macro `min', for ``minimum'', like this: ! 1072: ! 1073: #define min(X, Y) ((X) < (Y) ? (X) : (Y)) ! 1074: ! 1075: When you use this macro with an argument containing a side effect, as shown ! 1076: here, ! 1077: ! 1078: next = min (x + y, foo (z)); ! 1079: ! 1080: it expands as follows: ! 1081: ! 1082: next = ((x + y) < (foo (z)) ? (x + y) : (foo (z))); ! 1083: ! 1084: where `x + y' has been substituted for `X' and `foo (z)' for `Y'. ! 1085: ! 1086: The function `foo' is used only once in the statement as it appears in the ! 1087: program, but the expression `foo (z)' has been substituted twice into the ! 1088: macro expansion. As a result, `foo' might be called two times when the ! 1089: statement is executed. If it has side effects or if it takes a long time ! 1090: to compute, the results might not be what you intended. We say that `min' ! 1091: is an "unsafe" macro. ! 1092: ! 1093: The best solution to this problem is to define `min' in a way that computes ! 1094: the value of `foo (z)' only once. The C language offers no way standard ! 1095: way to do this, but it can be done with GNU C extensions as follows: ! 1096: ! 1097: #define min(X, Y) \ ! 1098: ({ typeof (X) __x = (X), __y = (Y); \ ! 1099: (__x < __y) ? __x : __y; }) ! 1100: ! 1101: If you do not wish to use GNU C extensions, the only solution is to be ! 1102: careful when *using* the macro `min'. For example, you can calculate the ! 1103: value of `foo (z)', save it in a variable, and use that variable in `min': ! 1104: ! 1105: #define min(X, Y) ((X) < (Y) ? (X) : (Y)) ! 1106: ... ! 1107: { ! 1108: int tem = foo (z); ! 1109: next = min (x + y, tem); ! 1110: } ! 1111: ! 1112: (where I assume that `foo' returns type `int'). ! 1113: ! 1114: ! 1115: File: cpp, Node: Self-Reference, Next: Argument Prescan, Prev: Side Effects, Up: Macro Pitfalls ! 1116: ! 1117: Self-Referential Macros ! 1118: ....................... ! 1119: ! 1120: A "self-referential" macro is one whose name appears in its definition. A ! 1121: special feature of ANSI Standard C is that the self-reference is not ! 1122: considered a macro call. It is passed into the preprocessor output ! 1123: unchanged. ! 1124: ! 1125: Let's consider an example: ! 1126: ! 1127: #define foo (4 + foo) ! 1128: ! 1129: where `foo' is also a variable in your program. ! 1130: ! 1131: Following the ordinary rules, each reference to `foo' will expand into `(4 ! 1132: + foo)'; then this will be rescanned and will expand into `(4 + (4 + ! 1133: foo))'; and so on until it causes a fatal error (memory full) in the ! 1134: preprocessor. ! 1135: ! 1136: However, the special rule about self-reference cuts this process short ! 1137: after one step, at `(4 + foo)'. Therefore, this macro definition has the ! 1138: possibly useful effect of causing the program to add 4 to the value of ! 1139: `foo' wherever `foo' is referred to. ! 1140: ! 1141: In most cases, it is a bad idea to take advantage of this feature. A ! 1142: person reading the program who sees that `foo' is a variable will not ! 1143: expect that it is a macro as well. The reader will come across a the ! 1144: identifier `foo' in the program and think its value should be that of the ! 1145: variable `foo', whereas in fact the value is four greater. ! 1146: ! 1147: The special rule for self-reference applies also to "indirect" ! 1148: self-reference. This is the case where a macro X expands to use a macro ! 1149: `y', and `y''s expansion refers to the macro `x'. The resulting reference ! 1150: to `x' comes indirectly from the expansion of `x', so it is a ! 1151: self-reference and is not further expanded. Thus, after ! 1152: ! 1153: #define x (4 + y) ! 1154: #define y (2 * x) ! 1155: ! 1156: `x' would expand into `(4 + (2 * x))'. Clear? ! 1157: ! 1158: But suppose `y' is used elsewhere, not from the definition of `x'. Then ! 1159: the use of `x' in the expansion of `y' is not a self-reference because `x' ! 1160: is not ``in progress''. So it does expand. However, the expansion of `x' ! 1161: contains a reference to `y', and that is an indirect self-reference now ! 1162: because `y' is ``in progress''. The result is that `y' expands to `(2 * (4 ! 1163: + y))'. ! 1164: ! 1165: It is not clear that this behavior would ever be useful, but it is ! 1166: specified by the ANSI C standard, so you need to understand it. ! 1167: ! 1168:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.