| This is Info file cpp.info, produced by Makeinfo version 1.68 from the |
| input file cpp.texi. |
| |
| This file documents the GNU C Preprocessor. |
| |
| Copyright 1987, 1989, 1991, 1992, 1993, 1994, 1995 Free Software |
| Foundation, Inc. |
| |
| Permission is granted to make and distribute verbatim copies of this |
| manual provided the copyright notice and this permission notice are |
| preserved on all copies. |
| |
| Permission is granted to copy and distribute modified versions of |
| this manual under the conditions for verbatim copying, provided also |
| that the entire resulting derived work is distributed under the terms |
| of a permission notice identical to this one. |
| |
| Permission is granted to copy and distribute translations of this |
| manual into another language, under the above conditions for modified |
| versions. |
| |
| |
| File: cpp.info, Node: Top, Next: Global Actions, Up: (DIR) |
| |
| The C Preprocessor |
| ****************** |
| |
| The C preprocessor is a "macro processor" that is used automatically |
| by the C compiler to transform your program before actual compilation. |
| It is called a macro processor because it allows you to define "macros", |
| which are brief abbreviations for longer constructs. |
| |
| The C preprocessor provides four separate facilities that you can |
| use as you see fit: |
| |
| * Inclusion of header files. These are files of declarations that |
| can be substituted into your program. |
| |
| * Macro expansion. You can define "macros", which are abbreviations |
| for arbitrary fragments of C code, and then the C preprocessor will |
| replace the macros with their definitions throughout the program. |
| |
| * Conditional compilation. Using special preprocessing directives, |
| you can include or exclude parts of the program according to |
| various conditions. |
| |
| * Line control. If you use a program to combine or rearrange source |
| files into an intermediate file which is then compiled, you can |
| use line control to inform the compiler of where each source line |
| originally came from. |
| |
| C preprocessors vary in some details. This manual discusses the GNU |
| C preprocessor, the C Compatible Compiler Preprocessor. The GNU C |
| preprocessor provides a superset of the features of ANSI Standard C. |
| |
| ANSI Standard C requires the rejection of many harmless constructs |
| commonly used by today's C programs. Such incompatibility would be |
| inconvenient for users, so the GNU C preprocessor is configured to |
| accept these constructs by default. Strictly speaking, to get ANSI |
| Standard C, you must use the options `-trigraphs', `-undef' and |
| `-pedantic', but in practice the consequences of having strict ANSI |
| Standard C make it undesirable to do this. *Note Invocation::. |
| |
| The C preprocessor is designed for C-like languages; you may run into |
| problems if you apply it to other kinds of languages, because it assumes |
| that it is dealing with C. For example, the C preprocessor sometimes |
| outputs extra white space to avoid inadvertent C token concatenation, |
| and this may cause problems with other languages. |
| |
| * Menu: |
| |
| * Global Actions:: Actions made uniformly on all input files. |
| * Directives:: General syntax of preprocessing directives. |
| * Header Files:: How and why to use header files. |
| * Macros:: How and why to use macros. |
| * Conditionals:: How and why to use conditionals. |
| * Combining Sources:: Use of line control when you combine source files. |
| * Other Directives:: Miscellaneous preprocessing directives. |
| * Output:: Format of output from the C preprocessor. |
| * Invocation:: How to invoke the preprocessor; command options. |
| * Concept Index:: Index of concepts and terms. |
| * Index:: Index of directives, predefined macros and options. |
| |
| |
| File: cpp.info, Node: Global Actions, Next: Directives, Prev: Top, Up: Top |
| |
| Transformations Made Globally |
| ============================= |
| |
| Most C preprocessor features are inactive unless you give specific |
| directives to request their use. (Preprocessing directives are lines |
| starting with `#'; *note Directives::.). But there are three |
| transformations that the preprocessor always makes on all the input it |
| receives, even in the absence of directives. |
| |
| * All C comments are replaced with single spaces. |
| |
| * Backslash-Newline sequences are deleted, no matter where. This |
| feature allows you to break long lines for cosmetic purposes |
| without changing their meaning. |
| |
| * Predefined macro names are replaced with their expansions (*note |
| Predefined::.). |
| |
| The first two transformations are done *before* nearly all other |
| parsing and before preprocessing directives are recognized. Thus, for |
| example, you can split a line cosmetically with Backslash-Newline |
| anywhere (except when trigraphs are in use; see below). |
| |
| /* |
| */ # /* |
| */ defi\ |
| ne FO\ |
| O 10\ |
| 20 |
| |
| is equivalent into `#define FOO 1020'. You can split even an escape |
| sequence with Backslash-Newline. For example, you can split `"foo\bar"' |
| between the `\' and the `b' to get |
| |
| "foo\\ |
| bar" |
| |
| This behavior is unclean: in all other contexts, a Backslash can be |
| inserted in a string constant as an ordinary character by writing a |
| double Backslash, and this creates an exception. But the ANSI C |
| standard requires it. (Strict ANSI C does not allow Newlines in string |
| constants, so they do not consider this a problem.) |
| |
| But there are a few exceptions to all three transformations. |
| |
| * C comments and predefined macro names are not recognized inside a |
| `#include' directive in which the file name is delimited with `<' |
| and `>'. |
| |
| * C comments and predefined macro names are never recognized within a |
| character or string constant. (Strictly speaking, this is the |
| rule, not an exception, but it is worth noting here anyway.) |
| |
| * Backslash-Newline may not safely be used within an ANSI "trigraph". |
| Trigraphs are converted before Backslash-Newline is deleted. If |
| you write what looks like a trigraph with a Backslash-Newline |
| inside, the Backslash-Newline is deleted as usual, but it is then |
| too late to recognize the trigraph. |
| |
| This exception is relevant only if you use the `-trigraphs' option |
| to enable trigraph processing. *Note Invocation::. |
| |
| |
| File: cpp.info, Node: Directives, Next: Header Files, Prev: Global Actions, Up: Top |
| |
| Preprocessing Directives |
| ======================== |
| |
| Most preprocessor features are active only if you use preprocessing |
| directives to request their use. |
| |
| Preprocessing directives are lines in your program that start with |
| `#'. The `#' is followed by an identifier that is the "directive name". |
| For example, `#define' is the directive that defines a macro. |
| Whitespace is also allowed before and after the `#'. |
| |
| The set of valid directive names is fixed. Programs cannot define |
| new preprocessing directives. |
| |
| Some directive names require arguments; these make up the rest of |
| the directive line and must be separated from the directive name by |
| whitespace. For example, `#define' must be followed by a macro name |
| and the intended expansion of the macro. *Note Simple Macros::. |
| |
| A preprocessing directive cannot be more than one line in normal |
| circumstances. It may be split cosmetically with Backslash-Newline, |
| but that has no effect on its meaning. Comments containing Newlines |
| can also divide the directive into multiple lines, but the comments are |
| changed to Spaces before the directive is interpreted. The only way a |
| significant Newline can occur in a preprocessing directive is within a |
| string constant or character constant. Note that most C compilers that |
| might be applied to the output from the preprocessor do not accept |
| string or character constants containing Newlines. |
| |
| The `#' and the directive name cannot come from a macro expansion. |
| For example, if `foo' is defined as a macro expanding to `define', that |
| does not make `#foo' a valid preprocessing directive. |
| |
| |
| File: cpp.info, Node: Header Files, Next: Macros, Prev: Directives, Up: Top |
| |
| Header Files |
| ============ |
| |
| A header file is a file containing C declarations and macro |
| definitions (*note Macros::.) to be shared between several source |
| files. You request the use of a header file in your program with the C |
| preprocessing directive `#include'. |
| |
| * Menu: |
| |
| * Header Uses:: What header files are used for. |
| * Include Syntax:: How to write `#include' directives. |
| * Include Operation:: What `#include' does. |
| * Once-Only:: Preventing multiple inclusion of one header file. |
| * Inheritance:: Including one header file in another header file. |
| |
| |
| File: cpp.info, Node: Header Uses, Next: Include Syntax, Prev: Header Files, Up: Header Files |
| |
| Uses of Header Files |
| -------------------- |
| |
| Header files serve two kinds of purposes. |
| |
| * System header files declare the interfaces to parts of the |
| operating system. You include them in your program to supply the |
| definitions and declarations you need to invoke system calls and |
| libraries. |
| |
| * Your own header files contain declarations for interfaces between |
| the source files of your program. Each time you have a group of |
| related declarations and macro definitions all or most of which |
| are needed in several different source files, it is a good idea to |
| create a header file for them. |
| |
| Including a header file produces the same results in C compilation as |
| copying the header file into each source file that needs it. But such |
| copying would be time-consuming and error-prone. With a header file, |
| the related declarations appear in only one place. If they need to be |
| changed, they can be changed in one place, and programs that include |
| the header file will automatically use the new version when next |
| recompiled. The header file eliminates the labor of finding and |
| changing all the copies as well as the risk that a failure to find one |
| copy will result in inconsistencies within a program. |
| |
| The usual convention is to give header files names that end with |
| `.h'. Avoid unusual characters in header file names, as they reduce |
| portability. |
| |
| |
| File: cpp.info, Node: Include Syntax, Next: Include Operation, Prev: Header Uses, Up: Header Files |
| |
| The `#include' Directive |
| ------------------------ |
| |
| Both user and system header files are included using the |
| preprocessing directive `#include'. It has three variants: |
| |
| `#include <FILE>' |
| This variant is used for system header files. It searches for a |
| file named FILE in a list of directories specified by you, then in |
| a standard list of system directories. You specify directories to |
| search for header files with the command option `-I' (*note |
| Invocation::.). The option `-nostdinc' inhibits searching the |
| standard system directories; in this case only the directories you |
| specify are searched. |
| |
| The parsing of this form of `#include' is slightly special because |
| comments are not recognized within the `<...>'. Thus, in |
| `#include <x/*y>' the `/*' does not start a comment and the |
| directive specifies inclusion of a system header file named |
| `x/*y'. Of course, a header file with such a name is unlikely to |
| exist on Unix, where shell wildcard features would make it hard to |
| manipulate. |
| |
| The argument FILE may not contain a `>' character. It may, |
| however, contain a `<' character. |
| |
| `#include "FILE"' |
| This variant is used for header files of your own program. It |
| searches for a file named FILE first in the current directory, |
| then in the same directories used for system header files. The |
| current directory is the directory of the current input file. It |
| is tried first because it is presumed to be the location of the |
| files that the current input file refers to. (If the `-I-' option |
| is used, the special treatment of the current directory is |
| inhibited.) |
| |
| The argument FILE may not contain `"' characters. If backslashes |
| occur within FILE, they are considered ordinary text characters, |
| not escape characters. None of the character escape sequences |
| appropriate to string constants in C are processed. Thus, |
| `#include "x\n\\y"' specifies a filename containing three |
| backslashes. It is not clear why this behavior is ever useful, but |
| the ANSI standard specifies it. |
| |
| `#include ANYTHING ELSE' |
| This variant is called a "computed #include". Any `#include' |
| directive whose argument does not fit the above two forms is a |
| computed include. The text ANYTHING ELSE is checked for macro |
| calls, which are expanded (*note Macros::.). When this is done, |
| the result must fit one of the above two variants--in particular, |
| the expanded text must in the end be surrounded by either quotes |
| or angle braces. |
| |
| This feature allows you to define a macro which controls the file |
| name to be used at a later point in the program. One application |
| of this is to allow a site-specific configuration file for your |
| program to specify the names of the system include files to be |
| used. This can help in porting the program to various operating |
| systems in which the necessary system header files are found in |
| different places. |
| |
| |
| File: cpp.info, Node: Include Operation, Next: Once-Only, Prev: Include Syntax, Up: Header Files |
| |
| How `#include' Works |
| -------------------- |
| |
| The `#include' directive works by directing the C preprocessor to |
| scan the specified file as input before continuing with the rest of the |
| current file. The output from the preprocessor contains the output |
| already generated, followed by the output resulting from the included |
| file, followed by the output that comes from the text after the |
| `#include' directive. For example, given a header file `header.h' as |
| follows, |
| |
| char *test (); |
| |
| and a main program called `program.c' that uses the header file, like |
| this, |
| |
| int x; |
| #include "header.h" |
| |
| main () |
| { |
| printf (test ()); |
| } |
| |
| the output generated by the C preprocessor for `program.c' as input |
| would be |
| |
| int x; |
| char *test (); |
| |
| main () |
| { |
| printf (test ()); |
| } |
| |
| Included files are not limited to declarations and macro |
| definitions; those are merely the typical uses. Any fragment of a C |
| program can be included from another file. The include file could even |
| contain the beginning of a statement that is concluded in the |
| containing file, or the end of a statement that was started in the |
| including file. However, a comment or a string or character constant |
| may not start in the included file and finish in the including file. |
| An unterminated comment, string constant or character constant in an |
| included file is considered to end (with an error message) at the end |
| of the file. |
| |
| It is possible for a header file to begin or end a syntactic unit |
| such as a function definition, but that would be very confusing, so |
| don't do it. |
| |
| The line following the `#include' directive is always treated as a |
| separate line by the C preprocessor even if the included file lacks a |
| final newline. |
| |
| |
| File: cpp.info, Node: Once-Only, Next: Inheritance, Prev: Include Operation, Up: Header Files |
| |
| Once-Only Include Files |
| ----------------------- |
| |
| Very often, one header file includes another. It can easily result |
| that a certain header file is included more than once. This may lead |
| to errors, if the header file defines structure types or typedefs, and |
| is certainly wasteful. Therefore, we often wish to prevent multiple |
| inclusion of a header file. |
| |
| The standard way to do this is to enclose the entire real contents |
| of the file in a conditional, like this: |
| |
| #ifndef FILE_FOO_SEEN |
| #define FILE_FOO_SEEN |
| |
| THE ENTIRE FILE |
| |
| #endif /* FILE_FOO_SEEN */ |
| |
| The macro `FILE_FOO_SEEN' indicates that the file has been included |
| once already. In a user header file, the macro name should not begin |
| with `_'. In a system header file, this name should begin with `__' to |
| avoid conflicts with user programs. In any kind of header file, the |
| macro name should contain the name of the file and some additional |
| text, to avoid conflicts with other header files. |
| |
| The GNU C preprocessor is programmed to notice when a header file |
| uses this particular construct and handle it efficiently. If a header |
| file is contained entirely in a `#ifndef' conditional, then it records |
| that fact. If a subsequent `#include' specifies the same file, and the |
| macro in the `#ifndef' is already defined, then the file is entirely |
| skipped, without even reading it. |
| |
| There is also an explicit directive to tell the preprocessor that it |
| need not include a file more than once. This is called `#pragma once', |
| and was used *in addition to* the `#ifndef' conditional around the |
| contents of the header file. `#pragma once' is now obsolete and should |
| not be used at all. |
| |
| In the Objective C language, there is a variant of `#include' called |
| `#import' which includes a file, but does so at most once. If you use |
| `#import' *instead of* `#include', then you don't need the conditionals |
| inside the header file to prevent multiple execution of the contents. |
| |
| `#import' is obsolete because it is not a well designed feature. It |
| requires the users of a header file--the applications programmers--to |
| know that a certain header file should only be included once. It is |
| much better for the header file's implementor to write the file so that |
| users don't need to know this. Using `#ifndef' accomplishes this goal. |
| |
| |
| File: cpp.info, Node: Inheritance, Prev: Once-Only, Up: Header Files |
| |
| Inheritance and Header Files |
| ---------------------------- |
| |
| "Inheritance" is what happens when one object or file derives some |
| of its contents by virtual copying from another object or file. In the |
| case of C header files, inheritance means that one header file includes |
| another header file and then replaces or adds something. |
| |
| If the inheriting header file and the base header file have different |
| names, then inheritance is straightforward: simply write `#include |
| "BASE"' in the inheriting file. |
| |
| Sometimes it is necessary to give the inheriting file the same name |
| as the base file. This is less straightforward. |
| |
| For example, suppose an application program uses the system header |
| `sys/signal.h', but the version of `/usr/include/sys/signal.h' on a |
| particular system doesn't do what the application program expects. It |
| might be convenient to define a "local" version, perhaps under the name |
| `/usr/local/include/sys/signal.h', to override or add to the one |
| supplied by the system. |
| |
| You can do this by compiling with the option `-I.', and writing a |
| file `sys/signal.h' that does what the application program expects. |
| But making this file include the standard `sys/signal.h' is not so |
| easy--writing `#include <sys/signal.h>' in that file doesn't work, |
| because it includes your own version of the file, not the standard |
| system version. Used in that file itself, this leads to an infinite |
| recursion and a fatal error in compilation. |
| |
| `#include </usr/include/sys/signal.h>' would find the proper file, |
| but that is not clean, since it makes an assumption about where the |
| system header file is found. This is bad for maintenance, since it |
| means that any change in where the system's header files are kept |
| requires a change somewhere else. |
| |
| The clean way to solve this problem is to use `#include_next', which |
| means, "Include the *next* file with this name." This directive works |
| like `#include' except in searching for the specified file: it starts |
| searching the list of header file directories *after* the directory in |
| which the current file was found. |
| |
| Suppose you specify `-I /usr/local/include', and the list of |
| directories to search also includes `/usr/include'; and suppose both |
| directories contain `sys/signal.h'. Ordinary `#include <sys/signal.h>' |
| finds the file under `/usr/local/include'. If that file contains |
| `#include_next <sys/signal.h>', it starts searching after that |
| directory, and finds the file in `/usr/include'. |
| |
| |
| File: cpp.info, Node: Macros, Next: Conditionals, Prev: Header Files, Up: Top |
| |
| Macros |
| ====== |
| |
| A macro is a sort of abbreviation which you can define once and then |
| use later. There are many complicated features associated with macros |
| in the C preprocessor. |
| |
| * Menu: |
| |
| * Simple Macros:: Macros that always expand the same way. |
| * Argument Macros:: Macros that accept arguments that are substituted |
| into the macro expansion. |
| * Predefined:: Predefined macros that are always available. |
| * Stringification:: Macro arguments converted into string constants. |
| * Concatenation:: Building tokens from parts taken from macro arguments. |
| * Undefining:: Cancelling a macro's definition. |
| * Redefining:: Changing a macro's definition. |
| * Macro Pitfalls:: Macros can confuse the unwary. Here we explain |
| several common problems and strange features. |
| |
| |
| File: cpp.info, Node: Simple Macros, Next: Argument Macros, Prev: Macros, Up: Macros |
| |
| Simple Macros |
| ------------- |
| |
| A "simple macro" is a kind of abbreviation. It is a name which |
| stands for a fragment of code. Some people refer to these as "manifest |
| constants". |
| |
| Before you can use a macro, you must "define" it explicitly with the |
| `#define' directive. `#define' is followed by the name of the macro |
| and then the code it should be an abbreviation for. For example, |
| |
| #define BUFFER_SIZE 1020 |
| |
| defines a macro named `BUFFER_SIZE' as an abbreviation for the text |
| `1020'. If somewhere after this `#define' directive there comes a C |
| statement of the form |
| |
| foo = (char *) xmalloc (BUFFER_SIZE); |
| |
| then the C preprocessor will recognize and "expand" the macro |
| `BUFFER_SIZE', resulting in |
| |
| foo = (char *) xmalloc (1020); |
| |
| The use of all upper case for macro names is a standard convention. |
| Programs are easier to read when it is possible to tell at a glance |
| which names are macros. |
| |
| Normally, a macro definition must be a single line, like all C |
| preprocessing directives. (You can split a long macro definition |
| cosmetically with Backslash-Newline.) There is one exception: Newlines |
| can be included in the macro definition if within a string or character |
| constant. This is because it is not possible for a macro definition to |
| contain an unbalanced quote character; the definition automatically |
| extends to include the matching quote character that ends the string or |
| character constant. Comments within a macro definition may contain |
| Newlines, which make no difference since the comments are entirely |
| replaced with Spaces regardless of their contents. |
| |
| Aside from the above, there is no restriction on what can go in a |
| macro body. Parentheses need not balance. The body need not resemble |
| valid C code. (But if it does not, you may get error messages from the |
| C compiler when you use the macro.) |
| |
| The C preprocessor scans your program sequentially, so macro |
| definitions take effect at the place you write them. Therefore, the |
| following input to the C preprocessor |
| |
| foo = X; |
| #define X 4 |
| bar = X; |
| |
| produces as output |
| |
| foo = X; |
| |
| bar = 4; |
| |
| After the preprocessor expands a macro name, the macro's definition |
| body is appended to the front of the remaining input, and the check for |
| macro calls continues. Therefore, the macro body can contain calls to |
| other macros. For example, after |
| |
| #define BUFSIZE 1020 |
| #define TABLESIZE BUFSIZE |
| |
| the name `TABLESIZE' when used in the program would go through two |
| stages of expansion, resulting ultimately in `1020'. |
| |
| This is not at all the same as defining `TABLESIZE' to be `1020'. |
| The `#define' for `TABLESIZE' uses exactly the body you specify--in |
| this case, `BUFSIZE'--and does not check to see whether it too is the |
| name of a macro. It's only when you *use* `TABLESIZE' that the result |
| of its expansion is checked for more macro names. *Note Cascaded |
| Macros::. |
| |
| |
| File: cpp.info, Node: Argument Macros, Next: Predefined, Prev: Simple Macros, Up: Macros |
| |
| Macros with Arguments |
| --------------------- |
| |
| A simple macro always stands for exactly the same text, each time it |
| is used. Macros can be more flexible when they accept "arguments". |
| Arguments are fragments of code that you supply each time the macro is |
| used. These fragments are included in the expansion of the macro |
| according to the directions in the macro definition. A macro that |
| accepts arguments is called a "function-like macro" because the syntax |
| for using it looks like a function call. |
| |
| To define a macro that uses arguments, you write a `#define' |
| directive with a list of "argument names" in parentheses after the name |
| of the macro. The argument names may be any valid C identifiers, |
| separated by commas and optionally whitespace. The open-parenthesis |
| must follow the macro name immediately, with no space in between. |
| |
| For example, here is a macro that computes the minimum of two numeric |
| values, as it is defined in many C programs: |
| |
| #define min(X, Y) ((X) < (Y) ? (X) : (Y)) |
| |
| (This is not the best way to define a "minimum" macro in GNU C. *Note |
| Side Effects::, for more information.) |
| |
| To use a macro that expects arguments, you write the name of the |
| macro followed by a list of "actual arguments" in parentheses, |
| separated by commas. The number of actual arguments you give must |
| match the number of arguments the macro expects. Examples of use of |
| the macro `min' include `min (1, 2)' and `min (x + 28, *p)'. |
| |
| The expansion text of the macro depends on the arguments you use. |
| Each of the argument names of the macro is replaced, throughout the |
| macro definition, with the corresponding actual argument. Using the |
| same macro `min' defined above, `min (1, 2)' expands into |
| |
| ((1) < (2) ? (1) : (2)) |
| |
| where `1' has been substituted for `X' and `2' for `Y'. |
| |
| Likewise, `min (x + 28, *p)' expands into |
| |
| ((x + 28) < (*p) ? (x + 28) : (*p)) |
| |
| Parentheses in the actual arguments must balance; a comma within |
| parentheses does not end an argument. However, there is no requirement |
| for brackets or braces to balance, and they do not prevent a comma from |
| separating arguments. Thus, |
| |
| macro (array[x = y, x + 1]) |
| |
| passes two arguments to `macro': `array[x = y' and `x + 1]'. If you |
| want to supply `array[x = y, x + 1]' as an argument, you must write it |
| as `array[(x = y, x + 1)]', which is equivalent C code. |
| |
| After the actual arguments are substituted into the macro body, the |
| entire result is appended to the front of the remaining input, and the |
| check for macro calls continues. Therefore, the actual arguments can |
| contain calls to other macros, either with or without arguments, or |
| even to the same macro. The macro body can also contain calls to other |
| macros. For example, `min (min (a, b), c)' expands into this text: |
| |
| ((((a) < (b) ? (a) : (b))) < (c) |
| ? (((a) < (b) ? (a) : (b))) |
| : (c)) |
| |
| (Line breaks shown here for clarity would not actually be generated.) |
| |
| If a macro `foo' takes one argument, and you want to supply an empty |
| argument, you must write at least some whitespace between the |
| parentheses, like this: `foo ( )'. Just `foo ()' is providing no |
| arguments, which is an error if `foo' expects an argument. But `foo0 |
| ()' is the correct way to call a macro defined to take zero arguments, |
| like this: |
| |
| #define foo0() ... |
| |
| If you use the macro name followed by something other than an |
| open-parenthesis (after ignoring any spaces, tabs and comments that |
| follow), it is not a call to the macro, and the preprocessor does not |
| change what you have written. Therefore, it is possible for the same |
| name to be a variable or function in your program as well as a macro, |
| and you can choose in each instance whether to refer to the macro (if |
| an actual argument list follows) or the variable or function (if an |
| argument list does not follow). |
| |
| Such dual use of one name could be confusing and should be avoided |
| except when the two meanings are effectively synonymous: that is, when |
| the name is both a macro and a function and the two have similar |
| effects. You can think of the name simply as a function; use of the |
| name for purposes other than calling it (such as, to take the address) |
| will refer to the function, while calls will expand the macro and |
| generate better but equivalent code. For example, you can use a |
| function named `min' in the same source file that defines the macro. |
| If you write `&min' with no argument list, you refer to the function. |
| If you write `min (x, bb)', with an argument list, the macro is |
| expanded. If you write `(min) (a, bb)', where the name `min' is not |
| followed by an open-parenthesis, the macro is not expanded, so you wind |
| up with a call to the function `min'. |
| |
| You may not define the same name as both a simple macro and a macro |
| with arguments. |
| |
| In the definition of a macro with arguments, the list of argument |
| names must follow the macro name immediately with no space in between. |
| If there is a space after the macro name, the macro is defined as |
| taking no arguments, and all the rest of the line is taken to be the |
| expansion. The reason for this is that it is often useful to define a |
| macro that takes no arguments and whose definition begins with an |
| identifier in parentheses. This rule about spaces makes it possible |
| for you to do either this: |
| |
| #define FOO(x) - 1 / (x) |
| |
| (which defines `FOO' to take an argument and expand into minus the |
| reciprocal of that argument) or this: |
| |
| #define BAR (x) - 1 / (x) |
| |
| (which defines `BAR' to take no argument and always expand into `(x) - |
| 1 / (x)'). |
| |
| Note that the *uses* of a macro with arguments can have spaces before |
| the left parenthesis; it's the *definition* where it matters whether |
| there is a space. |
| |
| |
| File: cpp.info, Node: Predefined, Next: Stringification, Prev: Argument Macros, Up: Macros |
| |
| Predefined Macros |
| ----------------- |
| |
| Several simple macros are predefined. You can use them without |
| giving definitions for them. They fall into two classes: standard |
| macros and system-specific macros. |
| |
| * Menu: |
| |
| * Standard Predefined:: Standard predefined macros. |
| * Nonstandard Predefined:: Nonstandard predefined macros. |
| |
| |
| File: cpp.info, Node: Standard Predefined, Next: Nonstandard Predefined, Prev: Predefined, Up: Predefined |
| |
| Standard Predefined Macros |
| .......................... |
| |
| The standard predefined macros are available with the same meanings |
| regardless of the machine or operating system on which you are using |
| GNU C. Their names all start and end with double underscores. Those |
| preceding `__GNUC__' in this table are standardized by ANSI C; the rest |
| are GNU C extensions. |
| |
| `__FILE__' |
| This macro expands to the name of the current input file, in the |
| form of a C string constant. The precise name returned is the one |
| that was specified in `#include' or as the input file name |
| argument. |
| |
| `__LINE__' |
| This macro expands to the current input line number, in the form |
| of a decimal integer constant. While we call it a predefined |
| macro, it's a pretty strange macro, since its "definition" changes |
| with each new line of source code. |
| |
| This and `__FILE__' are useful in generating an error message to |
| report an inconsistency detected by the program; the message can |
| state the source line at which the inconsistency was detected. |
| For example, |
| |
| fprintf (stderr, "Internal error: " |
| "negative string length " |
| "%d at %s, line %d.", |
| length, __FILE__, __LINE__); |
| |
| A `#include' directive changes the expansions of `__FILE__' and |
| `__LINE__' to correspond to the included file. At the end of that |
| file, when processing resumes on the input file that contained the |
| `#include' directive, the expansions of `__FILE__' and `__LINE__' |
| revert to the values they had before the `#include' (but |
| `__LINE__' is then incremented by one as processing moves to the |
| line after the `#include'). |
| |
| The expansions of both `__FILE__' and `__LINE__' are altered if a |
| `#line' directive is used. *Note Combining Sources::. |
| |
| `__DATE__' |
| This macro expands to a string constant that describes the date on |
| which the preprocessor is being run. The string constant contains |
| eleven characters and looks like `"Feb 1 1996"'. |
| |
| `__TIME__' |
| This macro expands to a string constant that describes the time at |
| which the preprocessor is being run. The string constant contains |
| eight characters and looks like `"23:59:01"'. |
| |
| `__STDC__' |
| This macro expands to the constant 1, to signify that this is ANSI |
| Standard C. (Whether that is actually true depends on what C |
| compiler will operate on the output from the preprocessor.) |
| |
| On some hosts, system include files use a different convention, |
| where `__STDC__' is normally 0, but is 1 if the user specifies |
| strict conformance to the C Standard. The preprocessor follows |
| the host convention when processing system include files, but when |
| processing user files it follows the usual GNU C convention. |
| |
| This macro is not defined if the `-traditional' option is used. |
| |
| `__STDC_VERSION__' |
| This macro expands to the C Standard's version number, a long |
| integer constant of the form `YYYYMML' where YYYY and MM are the |
| year and month of the Standard version. This signifies which |
| version of the C Standard the preprocessor conforms to. Like |
| `__STDC__', whether this version number is accurate for the entire |
| implementation depends on what C compiler will operate on the |
| output from the preprocessor. |
| |
| This macro is not defined if the `-traditional' option is used. |
| |
| `__GNUC__' |
| This macro is defined if and only if this is GNU C. This macro is |
| defined only when the entire GNU C compiler is in use; if you |
| invoke the preprocessor directly, `__GNUC__' is undefined. The |
| value identifies the major version number of GNU CC (`1' for GNU CC |
| version 1, which is now obsolete, and `2' for version 2). |
| |
| `__GNUC_MINOR__' |
| The macro contains the minor version number of the compiler. This |
| can be used to work around differences between different releases |
| of the compiler (for example, if gcc 2.6.3 is known to support a |
| feature, you can test for `__GNUC__ > 2 || (__GNUC__ == 2 && |
| __GNUC_MINOR__ >= 6)'). The last number, `3' in the example |
| above, denotes the bugfix level of the compiler; no macro contains |
| this value. |
| |
| `__GNUG__' |
| The GNU C compiler defines this when the compilation language is |
| C++; use `__GNUG__' to distinguish between GNU C and GNU C++. |
| |
| `__cplusplus' |
| The draft ANSI standard for C++ used to require predefining this |
| variable. Though it is no longer required, GNU C++ continues to |
| define it, as do other popular C++ compilers. You can use |
| `__cplusplus' to test whether a header is compiled by a C compiler |
| or a C++ compiler. |
| |
| `__STRICT_ANSI__' |
| This macro is defined if and only if the `-ansi' switch was |
| specified when GNU C was invoked. Its definition is the null |
| string. This macro exists primarily to direct certain GNU header |
| files not to define certain traditional Unix constructs which are |
| incompatible with ANSI C. |
| |
| `__BASE_FILE__' |
| This macro expands to the name of the main input file, in the form |
| of a C string constant. This is the source file that was specified |
| as an argument when the C compiler was invoked. |
| |
| `__INCLUDE_LEVEL__' |
| This macro expands to a decimal integer constant that represents |
| the depth of nesting in include files. The value of this macro is |
| incremented on every `#include' directive and decremented at every |
| end of file. For input files specified by command line arguments, |
| the nesting level is zero. |
| |
| `__VERSION__' |
| This macro expands to a string which describes the version number |
| of GNU C. The string is normally a sequence of decimal numbers |
| separated by periods, such as `"2.6.0"'. The only reasonable use |
| of this macro is to incorporate it into a string constant. |
| |
| `__OPTIMIZE__' |
| This macro is defined in optimizing compilations. It causes |
| certain GNU header files to define alternative macro definitions |
| for some system library functions. It is unwise to refer to or |
| test the definition of this macro unless you make very sure that |
| programs will execute with the same effect regardless. |
| |
| `__CHAR_UNSIGNED__' |
| This macro is defined if and only if the data type `char' is |
| unsigned on the target machine. It exists to cause the standard |
| header file `limits.h' to work correctly. It is bad practice to |
| refer to this macro yourself; instead, refer to the standard |
| macros defined in `limits.h'. The preprocessor uses this macro to |
| determine whether or not to sign-extend large character constants |
| written in octal; see *Note The `#if' Directive: #if Directive. |
| |
| `__REGISTER_PREFIX__' |
| This macro expands to a string describing the prefix applied to cpu |
| registers in assembler code. It can be used to write assembler |
| code that is usable in multiple environments. For example, in the |
| `m68k-aout' environment it expands to the string `""', but in the |
| `m68k-coff' environment it expands to the string `"%"'. |
| |
| `__USER_LABEL_PREFIX__' |
| This macro expands to a string describing the prefix applied to |
| user generated labels in assembler code. It can be used to write |
| assembler code that is usable in multiple environments. For |
| example, in the `m68k-aout' environment it expands to the string |
| `"_"', but in the `m68k-coff' environment it expands to the string |
| `""'. This does not work with the `-mno-underscores' option that |
| the i386 OSF/rose and m88k targets provide nor with the `-mcall*' |
| options of the rs6000 System V Release 4 target. |
| |
| |
| File: cpp.info, Node: Nonstandard Predefined, Prev: Standard Predefined, Up: Predefined |
| |
| Nonstandard Predefined Macros |
| ............................. |
| |
| The C preprocessor normally has several predefined macros that vary |
| between machines because their purpose is to indicate what type of |
| system and machine is in use. This manual, being for all systems and |
| machines, cannot tell you exactly what their names are; instead, we |
| offer a list of some typical ones. You can use `cpp -dM' to see the |
| values of predefined macros; see *Note Invocation::. |
| |
| Some nonstandard predefined macros describe the operating system in |
| use, with more or less specificity. For example, |
| |
| `unix' |
| `unix' is normally predefined on all Unix systems. |
| |
| `BSD' |
| `BSD' is predefined on recent versions of Berkeley Unix (perhaps |
| only in version 4.3). |
| |
| Other nonstandard predefined macros describe the kind of CPU, with |
| more or less specificity. For example, |
| |
| `vax' |
| `vax' is predefined on Vax computers. |
| |
| `mc68000' |
| `mc68000' is predefined on most computers whose CPU is a Motorola |
| 68000, 68010 or 68020. |
| |
| `m68k' |
| `m68k' is also predefined on most computers whose CPU is a 68000, |
| 68010 or 68020; however, some makers use `mc68000' and some use |
| `m68k'. Some predefine both names. What happens in GNU C depends |
| on the system you are using it on. |
| |
| `M68020' |
| `M68020' has been observed to be predefined on some systems that |
| use 68020 CPUs--in addition to `mc68000' and `m68k', which are |
| less specific. |
| |
| `_AM29K' |
| `_AM29000' |
| Both `_AM29K' and `_AM29000' are predefined for the AMD 29000 CPU |
| family. |
| |
| `ns32000' |
| `ns32000' is predefined on computers which use the National |
| Semiconductor 32000 series CPU. |
| |
| Yet other nonstandard predefined macros describe the manufacturer of |
| the system. For example, |
| |
| `sun' |
| `sun' is predefined on all models of Sun computers. |
| |
| `pyr' |
| `pyr' is predefined on all models of Pyramid computers. |
| |
| `sequent' |
| `sequent' is predefined on all models of Sequent computers. |
| |
| These predefined symbols are not only nonstandard, they are contrary |
| to the ANSI standard because their names do not start with underscores. |
| Therefore, the option `-ansi' inhibits the definition of these symbols. |
| |
| This tends to make `-ansi' useless, since many programs depend on the |
| customary nonstandard predefined symbols. Even system header files |
| check them and will generate incorrect declarations if they do not find |
| the names that are expected. You might think that the header files |
| supplied for the Uglix computer would not need to test what machine |
| they are running on, because they can simply assume it is the Uglix; |
| but often they do, and they do so using the customary names. As a |
| result, very few C programs will compile with `-ansi'. We intend to |
| avoid such problems on the GNU system. |
| |
| What, then, should you do in an ANSI C program to test the type of |
| machine it will run on? |
| |
| GNU C offers a parallel series of symbols for this purpose, whose |
| names are made from the customary ones by adding `__' at the beginning |
| and end. Thus, the symbol `__vax__' would be available on a Vax, and |
| so on. |
| |
| The set of nonstandard predefined names in the GNU C preprocessor is |
| controlled (when `cpp' is itself compiled) by the macro |
| `CPP_PREDEFINES', which should be a string containing `-D' options, |
| separated by spaces. For example, on the Sun 3, we use the following |
| definition: |
| |
| #define CPP_PREDEFINES "-Dmc68000 -Dsun -Dunix -Dm68k" |
| |
| This macro is usually specified in `tm.h'. |
| |
| |
| File: cpp.info, Node: Stringification, Next: Concatenation, Prev: Predefined, Up: Macros |
| |
| Stringification |
| --------------- |
| |
| "Stringification" means turning a code fragment into a string |
| constant whose contents are the text for the code fragment. For |
| example, stringifying `foo (z)' results in `"foo (z)"'. |
| |
| In the C preprocessor, stringification is an option available when |
| macro arguments are substituted into the macro definition. In the body |
| of the definition, when an argument name appears, the character `#' |
| before the name specifies stringification of the corresponding actual |
| argument when it is substituted at that point in the definition. The |
| same argument may be substituted in other places in the definition |
| without stringification if the argument name appears in those places |
| with no `#'. |
| |
| Here is an example of a macro definition that uses stringification: |
| |
| #define WARN_IF(EXP) \ |
| do { if (EXP) \ |
| fprintf (stderr, "Warning: " #EXP "\n"); } \ |
| while (0) |
| |
| Here the actual argument for `EXP' is substituted once as given, into |
| the `if' statement, and once as stringified, into the argument to |
| `fprintf'. The `do' and `while (0)' are a kludge to make it possible |
| to write `WARN_IF (ARG);', which the resemblance of `WARN_IF' to a |
| function would make C programmers want to do; see *Note Swallow |
| Semicolon::. |
| |
| The stringification feature is limited to transforming one macro |
| argument into one string constant: there is no way to combine the |
| argument with other text and then stringify it all together. But the |
| example above shows how an equivalent result can be obtained in ANSI |
| Standard C using the feature that adjacent string constants are |
| concatenated as one string constant. The preprocessor stringifies the |
| actual value of `EXP' into a separate string constant, resulting in |
| text like |
| |
| do { if (x == 0) \ |
| fprintf (stderr, "Warning: " "x == 0" "\n"); } \ |
| while (0) |
| |
| but the C compiler then sees three consecutive string constants and |
| concatenates them into one, producing effectively |
| |
| do { if (x == 0) \ |
| fprintf (stderr, "Warning: x == 0\n"); } \ |
| while (0) |
| |
| Stringification in C involves more than putting doublequote |
| characters around the fragment; it is necessary to put backslashes in |
| front of all doublequote characters, and all backslashes in string and |
| character constants, in order to get a valid C string constant with the |
| proper contents. Thus, stringifying `p = "foo\n";' results in `"p = |
| \"foo\\n\";"'. However, backslashes that are not inside of string or |
| character constants are not duplicated: `\n' by itself stringifies to |
| `"\n"'. |
| |
| Whitespace (including comments) in the text being stringified is |
| handled according to precise rules. All leading and trailing |
| whitespace is ignored. Any sequence of whitespace in the middle of the |
| text is converted to a single space in the stringified result. |
| |
| |
| File: cpp.info, Node: Concatenation, Next: Undefining, Prev: Stringification, Up: Macros |
| |
| Concatenation |
| ------------- |
| |
| "Concatenation" means joining two strings into one. In the context |
| of macro expansion, concatenation refers to joining two lexical units |
| into one longer one. Specifically, an actual argument to the macro can |
| be concatenated with another actual argument or with fixed text to |
| produce a longer name. The longer name might be the name of a function, |
| variable or type, or a C keyword; it might even be the name of another |
| macro, in which case it will be expanded. |
| |
| When you define a macro, you request concatenation with the special |
| operator `##' in the macro body. When the macro is called, after |
| actual arguments are substituted, all `##' operators are deleted, and |
| so is any whitespace next to them (including whitespace that was part |
| of an actual argument). The result is to concatenate the syntactic |
| tokens on either side of the `##'. |
| |
| Consider a C program that interprets named commands. There probably |
| needs to be a table of commands, perhaps an array of structures |
| declared as follows: |
| |
| struct command |
| { |
| char *name; |
| void (*function) (); |
| }; |
| |
| struct command commands[] = |
| { |
| { "quit", quit_command}, |
| { "help", help_command}, |
| ... |
| }; |
| |
| It would be cleaner not to have to give each command name twice, |
| once in the string constant and once in the function name. A macro |
| which takes the name of a command as an argument can make this |
| unnecessary. The string constant can be created with stringification, |
| and the function name by concatenating the argument with `_command'. |
| Here is how it is done: |
| |
| #define COMMAND(NAME) { #NAME, NAME ## _command } |
| |
| struct command commands[] = |
| { |
| COMMAND (quit), |
| COMMAND (help), |
| ... |
| }; |
| |
| The usual case of concatenation is concatenating two names (or a |
| name and a number) into a longer name. But this isn't the only valid |
| case. It is also possible to concatenate two numbers (or a number and |
| a name, such as `1.5' and `e3') into a number. Also, multi-character |
| operators such as `+=' can be formed by concatenation. In some cases |
| it is even possible to piece together a string constant. However, two |
| pieces of text that don't together form a valid lexical unit cannot be |
| concatenated. For example, concatenation with `x' on one side and `+' |
| on the other is not meaningful because those two characters can't fit |
| together in any lexical unit of C. The ANSI standard says that such |
| attempts at concatenation are undefined, but in the GNU C preprocessor |
| it is well defined: it puts the `x' and `+' side by side with no |
| particular special results. |
| |
| Keep in mind that the C preprocessor converts comments to whitespace |
| before macros are even considered. Therefore, you cannot create a |
| comment by concatenating `/' and `*': the `/*' sequence that starts a |
| comment is not a lexical unit, but rather the beginning of a "long" |
| space character. Also, you can freely use comments next to a `##' in a |
| macro definition, or in actual arguments that will be concatenated, |
| because the comments will be converted to spaces at first sight, and |
| concatenation will later discard the spaces. |
| |
| |
| File: cpp.info, Node: Undefining, Next: Redefining, Prev: Concatenation, Up: Macros |
| |
| Undefining Macros |
| ----------------- |
| |
| To "undefine" a macro means to cancel its definition. This is done |
| with the `#undef' directive. `#undef' is followed by the macro name to |
| be undefined. |
| |
| Like definition, undefinition occurs at a specific point in the |
| source file, and it applies starting from that point. The name ceases |
| to be a macro name, and from that point on it is treated by the |
| preprocessor as if it had never been a macro name. |
| |
| For example, |
| |
| #define FOO 4 |
| x = FOO; |
| #undef FOO |
| x = FOO; |
| |
| expands into |
| |
| x = 4; |
| |
| x = FOO; |
| |
| In this example, `FOO' had better be a variable or function as well as |
| (temporarily) a macro, in order for the result of the expansion to be |
| valid C code. |
| |
| The same form of `#undef' directive will cancel definitions with |
| arguments or definitions that don't expect arguments. The `#undef' |
| directive has no effect when used on a name not currently defined as a |
| macro. |
| |
| |
| File: cpp.info, Node: Redefining, Next: Macro Pitfalls, Prev: Undefining, Up: Macros |
| |
| Redefining Macros |
| ----------------- |
| |
| "Redefining" a macro means defining (with `#define') a name that is |
| already defined as a macro. |
| |
| A redefinition is trivial if the new definition is transparently |
| identical to the old one. You probably wouldn't deliberately write a |
| trivial redefinition, but they can happen automatically when a header |
| file is included more than once (*note Header Files::.), so they are |
| accepted silently and without effect. |
| |
| Nontrivial redefinition is considered likely to be an error, so it |
| provokes a warning message from the preprocessor. However, sometimes it |
| is useful to change the definition of a macro in mid-compilation. You |
| can inhibit the warning by undefining the macro with `#undef' before the |
| second definition. |
| |
| In order for a redefinition to be trivial, the new definition must |
| exactly match the one already in effect, with two possible exceptions: |
| |
| * Whitespace may be added or deleted at the beginning or the end. |
| |
| * Whitespace may be changed in the middle (but not inside strings). |
| However, it may not be eliminated entirely, and it may not be added |
| where there was no whitespace at all. |
| |
| Recall that a comment counts as whitespace. |
| |