1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936 |
- Info file cpp.info, produced by texinfo-format-buffer -*-Text-*-
- from file cpp.texinfo
- This file documents the GNU C Preprocessor.
- Copyright (C) 1987 Richard M. Stallman.
- 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, Up: (DIR), Next: Global Actions
- 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 preprocessor commands, 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 `-T', `-undef' and `-pedantic', but in practice the
- consequences of having strict ANSI Standard C make it undesirable to do
- this. *Note Invocation::.
- * Menu:
- * Global Actions:: Actions made uniformly on all input files.
- * Commands:: General syntax of preprocessor commands.
- * 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 Commands:: Miscellaneous preprocessor commands.
- * 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 commands, predefined macros and options.
- File: cpp.info Node: Global Actions, Prev: Top, Up: Top, Next: Commands
- Transformations Made Globally
- =============================
- Most C preprocessor features are inactive unless you give specific commands
- to request their use. (Preprocessor commands are lines starting with
- `#'; *Note Commands::). But there are three transformations that the
- preprocessor always makes on all the input it receives, even in the absence
- of commands.
- * 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 preprocessor commands 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' command 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 `-T' option to
- enable trigraph processing. *Note Invocation::.
- File: cpp.info Node: Commands, Prev: Global Actions, Up: Top, Next: Header Files
- Preprocessor Commands
- =====================
- Most preprocessor features are active only if you use preprocessor commands
- to request their use.
- Preprocessor commands are lines in your program that start with `#'.
- The `#' is followed by an identifier that is the "command name".
- For example, `#define' is the command that defines a macro.
- Whitespace is also allowed before and after the `#'.
- The set of valid command names is fixed. Programs cannot define new
- preprocessor commands.
- Some command names require arguments; these make up the rest of the command
- line and must be separated from the command name by whitespace. For example,
- `#define' must be followed by a macro name and the intended expansion
- of the macro.
- A preprocessor command 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 command into
- multiple lines, but the comments are changed to Spaces before the command
- is interpreted. The only way a significant Newline can occur in a preprocessor
- command 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 command 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 preprocessor command.
- File: cpp.info Node: Header Files, Prev: Commands, Up: Top, Next: Macros
- 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 preprocessor command
- `#include'.
- File: cpp.info Node: Header Uses, Prev: Header Files, Up: Header Files, Next: Include Syntax
- 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
- 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'.
- File: cpp.info Node: Include Syntax, Prev: Header Uses, Up: Header Files, Next: Include Operation
- The `#include' Command
- ----------------------
- Both user and system header files are included using the preprocessor
- command `#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 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 command 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 working
- directory, then in the same directories used for system header
- files. The current working directory is tried first because it is
- presumed to be the location of the files of the program being
- compiled.
-
- 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'
- command 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.
-
- 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-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, Prev: Include Syntax, Up: Header Files
- How `#include' Works
- --------------------
- The `#include' command 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'
- command. For example, given two files as follows:
- /* File program.c */
- int x;
- #include "header.h"
-
- main ()
- {
- printf (test ());
- }
-
-
- /* File header.h */
- char *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; they
- are merely the typical use. 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.
- The line following the `#include' command is always treated as a
- separate line by the C preprocessor even if the included file lacks a final
- newline.
- File: cpp.info Node: Macros, Prev: Header Files, Up: Top, Next: Conditionals
- 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, Prev: Macros, Up: Macros, Next: Argument Macros
- Simple Macros
- -------------
- A "simple macro" is a kind of abbreviation. It is a name which stands
- for a fragment of code.
- Before you can use a macro, you must "define" it explicitly with the
- `#define' command. `#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'. Therefore, if somewhere after this `#define' command
- 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 definition must be a single line; however, it may not end in the
- middle of a multi-line string constant or character constant.
- 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 preprocessor
- commands. (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. By the same
- token, 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. (Of course, you might 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, Prev: Simple Macros, Up: Macros, Next: Predefined
- 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.
- To define a macro that uses arguments, you write a `#define' command
- 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; thus, 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
- ((((a) < (b) ? (a) : (b))) < (c)
- ? (((a) < (b) ? (a) : (b)))
- : (c))
- (Line breaks shown here for clarity would not actually be generated.)
- 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'.
- It is not allowed to 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 name 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, Prev: Argument Macros, Up: Macros, Next: Stringification
- 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, Prev: Predefined, Up: Predefined, Next: Nonstandard 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.
-
- `__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' command 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' command, 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' command 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 `"Jan 29 1987"' or `"Apr
- 1 1905"'.
-
- `__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.)
-
- `__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.
-
- `__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.
-
- `__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 `"1.18"'. 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 `limit.h' to work correctly. It is bad practice
- to refer to this macro yourself; instead, refer to the standard
- macros defined in `limit.h'.
- 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.
- 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' that
- are less specific.
-
- `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. However,
- the GNU C preprocessor would be useless if it did not predefine the same
- names that are normally predefined on the system and machine you are using.
- Even system header files check the predefined names and will generate
- incorrect declarations if they do not find the names that are expected.
- The set of nonstandard predefined names in the GNU C preprocessor is
- controlled by the macro `CPP_PREDEFINES', which should be a string
- containing `-D' options, separated by spaces. For example, on the Sun,
- the definition
- #define CPP_PREDEFINES "-Dmc68000 -Dsun -Dunix -Dm68k"
- is used.
- The `-ansi' option which requests complete support for ANSI C
- inhibits the definition of these predefined symbols.
- File: cpp.info Node: Stringification, Prev: Predefined, Up: Macros, Next: Concatenation
- 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; *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 `EXP''s actual argument
- 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, Prev: Stringification, Up: Macros, Next: Undefining
- 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, Prev: Concatenation, Up: Macros, Next: Redefining
- Undefining Macros
- -----------------
- To "undefine" a macro means to cancel its definition. This is done
- with the `#undef' command. `#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' command will cancel definitions with
- arguments or definitions that don't expect arguments. The `#undef'
- command has no effect when used on a name not currently defined as a macro.
- File: cpp.info Node: Redefining, Prev: Undefining, Up: Macros, Next: Macro Pitfalls
- 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 reefinition 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.
- File: cpp.info Node: Macro Pitfalls, Prev: Redefining, Up: Macros
- Pitfalls and Subtleties of Macros
- ---------------------------------
- In this section we describe some special rules that apply to macros and
- macro expansion, and point out certain cases in which the rules have
- counterintuitive consequences that you must watch out for.
- * Menu:
- * Misnesting:: Macros can contain unmatched parentheses.
- * Macro Parentheses:: Why apparently superfluous parentheses
- may be necessary to avoid incorrect grouping.
- * Swallow Semicolon:: Macros that look like functions
- but expand into compound statements.
- * Side Effects:: Unsafe macros that cause trouble when
- arguments contain side effects.
- * Self-Reference:: Macros whose definitions use the macros' own names.
- * Argument Prescan:: Actual arguments are checked for macro calls
- before they are substituted.
- * Cascaded Macros:: Macros whose definitions use other macros.
- File: cpp.info Node: Misnesting, Prev: Macro Pitfalls, Up: Macro Pitfalls, Next: Macro Parentheses
- Improperly Nested Constructs
- ............................
- Recall that when a macro is called with arguments, the arguments are
- substituted into the macro body and the result is checked, together with
- the rest of the input file, for more macro calls.
- It is possible to piece together a macro call coming partially from the
- macro body and partially from the actual arguments. For example,
- #define double(x) (2*(x))
- #define call_with_1(x) x(1)
- would expand `call_with_1 (double)' into `(2*(1))'.
- Macro definitions do not have to have balanced parentheses. By writing an
- unbalanced open parenthesis in a macro body, it is possible to create a
- macro call that begins inside the macro body but ends outside of it. For
- example,
- #define strange(file) fprintf (file, "%s %d",
- ...
- strange(stderr) p, 35)
- This bizarre example expands to `fprintf (stderr, "%s %d", p, 35)'!
- File: cpp.info Node: Macro Parentheses, Prev: Misnesting, Up: Macro Pitfalls, Next: Swallow Semicolon
- Unintended Grouping of Arithmetic
- .................................
- You may have noticed that in most of the macro definition examples shown
- above, each occurrence of a macro argument name had parentheses around it.
- In addition, another pair of parentheses usually surround the entire macro
- definition. Here is why it is best to write macros that way.
- Suppose you define a macro as follows
- #define ceil_div(x, y) (x + y - 1) / y
- whose purpose is to divide, rounding up. (One use for this
- operation is to compute how many `int''s are needed to hold
- a certain number of `char''s.) Then suppose it is used as follows:
- a = ceil_div (b & c, sizeof (int));
- This expands into
- a = (b & c + sizeof (int) - 1) / sizeof (int);
- which does not do what is intended. The operator-precedence rules of
- C make it equivalent to this:
- a = (b & (c + sizeof (int) - 1)) / sizeof (int);
- But what we want is this:
- a = ((b & c) + sizeof (int) - 1)) / sizeof (int);
- Defining the macro as
- #define ceil_div(x, y) ((x) + (y) - 1) / (y)
- provides the desired result.
- However, unintended grouping can result in another way. Consider
- `sizeof ceil_div(1, 2)'. That has the appearance of a C expression
- that would compute the size of the type of `ceil_div (1, 2)', but in
- fact it means something very different. Here is what it expands to:
- sizeof ((1) + (2) - 1) / (2)
- This would take the size of an integer and divide it by two. The precedence
- rules have put the division outside the `sizeof' when it was intended
- to be inside.
- Parentheses around the entire macro definition can prevent such problems.
- Here, then, is the recommended way to define `ceil_div':
- #define ceil_div(x, y) (((x) + (y) - 1) / (y))
- File: cpp.info Node: Swallow Semicolon, Prev: Macro Parentheses, Up: Macro Pitfalls, Next: Side Effects
- Swallowing the Semicolon
- ........................
- Often it is desirable to define a macro that expands into a compound
- statement. Consider, for example, the following macro, that advances a
- pointer (the argument `p' says where to find it) across whitespace
- characters:
- #define SKIP_SPACES (p, limit) \
- { register char *lim = (limit); \
- while (p != lim) { \
- if (*p++ != ' ') { \
- p--; break; }}}
- Here Backslash-Newline is used to split the macro definition, which must
- be a single line, so that it resembles the way such C code would be
- layed out if not part of a macro definition.
- A call to this macro might be `SKIP_SPACES (p, lim)'. Strictly
- speaking, the call expands to a compound statement, which is a complete
- statement with no need for a semicolon to end it. But it looks like a
- function call. So it minimizes confusion if you can use it like a function
- call, writing a semicolon afterward, as in `SKIP_SPACES (p, lim);'
- But this can cause trouble before `else' statements, because the
- semicolon is actually a null statement. Suppose you write
- if (*p != 0)
- SKIP_SPACES (p, lim);
- else ...
- The presence of two statements---the compound statement and a null
- statement---in between the `if' condition and the `else'
- makes invalid C code.
- The definition of the macro `SKIP_SPACES' can be altered to solve
- this problem, using a `do ... while' statement. Here is how:
-
- #define SKIP_SPACES (p, limit) \
- do { register char *lim = (limit); \
- while (p != lim) { \
- if (*p++ != ' ') { \
- p--; break; }}} \
- while (0)
- Now `SKIP_SPACES (p, lim);' expands into
- do {...} while (0);
- which is one statement.
- File: cpp.info Node: Side Effects, Prev: Swallow Semicolon, Up: Macro Pitfalls, Next: Self-Reference
- Duplication of Side Effects
- ...........................
- Many C programs define a macro `min', for "minimum", like this:
- #define min(X, Y) ((X) < (Y) ? (X) : (Y))
- When you use this macro with an argument containing a side effect,
- as shown here,
- next = min (x + y, foo (z));
- it expands as follows:
- next = ((x + y) < (foo (z)) ? (x + y) : (foo (z)));
- where `x + y' has been substituted for `X' and `foo (z)'
- for `Y'.
- The function `foo' is used only once in the statement as it appears
- in the program, but the expression `foo (z)' has been substituted
- twice into the macro expansion. As a result, `foo' might be called
- two times when the statement is executed. If it has side effects or
- if it takes a long time to compute, the results might not be what you
- intended. We say that `min' is an "unsafe" macro.
- The best solution to this problem is to define `min' in a way that
- computes the value of `foo (z)' only once. The C language offers no
- way standard way to do this, but it can be done with GNU C extensions as
- follows:
- #define min(X, Y) \
- ({ typeof (X) __x = (X), __y = (Y); \
- (__x < __y) ? __x : __y; })
- If you do not wish to use GNU C extensions, the only solution is to be
- careful when *using* the macro `min'. For example, you can
- calculate the value of `foo (z)', save it in a variable, and use that
- variable in `min':
- #define min(X, Y) ((X) < (Y) ? (X) : (Y))
- ...
- {
- int tem = foo (z);
- next = min (x + y, tem);
- }
- (where I assume that `foo' returns type `int').
- File: cpp.info Node: Self-Reference, Prev: Side Effects, Up: Macro Pitfalls, Next: Argument Prescan
- Self-Referential Macros
- .......................
- A "self-referential" macro is one whose name appears in its definition.
- A special feature of ANSI Standard C is that the self-reference is not
- considered a macro call. It is passed into the preprocessor output
- unchanged.
- Let's consider an example:
- #define foo (4 + foo)
- where `foo' is also a variable in your program.
- Following the ordinary rules, each reference to `foo' will expand into
- `(4 + foo)'; then this will be rescanned and will expand into `(4
- + (4 + foo))'; and so on until it causes a fatal error (memory full) in the
- preprocessor.
- However, the special rule about self-reference cuts this process short
- after one step, at `(4 + foo)'. Therefore, this macro definition
- has the possibly useful effect of causing the program to add 4 to
- the value of `foo' wherever `foo' is referred to.
- In most cases, it is a bad idea to take advantage of this feature.
- A person reading the program who sees that `foo' is a variable will
- not expect that it is a macro as well. The reader will come across a
- the identifier `foo' in the program and think its value should be
- that of the variable `foo', whereas in fact the value is four
- greater.
- The special rule for self-reference applies also to "indirect"
- self-reference. This is the case where a macro X expands to use a
- macro `y', and `y''s expansion refers to the macro `x'. The
- resulting reference to `x' comes indirectly from the expansion of
- `x', so it is a self-reference and is not further expanded. Thus,
- after
- #define x (4 + y)
- #define y (2 * x)
- `x' would expand into `(4 + (2 * x))'. Clear?
- But suppose `y' is used elsewhere, not from the definition of `x'.
- Then the use of `x' in the expansion of `y' is not a self-reference
- because `x' is not "in progress". So it does expand. However,
- the expansion of `x' contains a reference to `y', and that
- is an indirect self-reference now because `y' is "in progress".
- The result is that `y' expands to `(2 * (4 + y))'.
- It is not clear that this behavior would ever be useful, but it is specified
- by the ANSI C standard, so you need to understand it.
- File: cpp.info Node: Argument Prescan, Prev: Self-Reference, Up: Macro Pitfalls, Next: Cascaded Macros
- Separate Expansion of Macro Arguments
- .....................................
- We have explained that the expansion of a macro, including the substituted
- actual arguments, is scanned over again for macro calls to be expanded.
- What really happens is more subtle: first each actual argument text is scanned
- separately for macro calls. Then the results of this are substituted into
- the macro body to produce the macro expansion, and the macro expansion
- is scanned again for macros to expand.
- The result is that the actual arguments are scanned *twice* to expand
- macro calls in them.
- Most of the time, this has no effect. If the actual argument contained
- any macro calls, they are expanded during the first scan. The result
- therefore contains no macro calls, so the second scan does not change it.
- If the actual argument were substituted as given, with no prescan,
- the single remaining scan would find the same macro calls and produce
- the same results.
- You might expect the double scan to change the results when a
- self-referential macro is used in an actual argument of another macro
- (*Note Self-Reference::): the self-referential macro would be expanded once
- in the first scan, and a second time in the second scan. But this is not
- what happens. The self-references that do not expand in the first scan are
- marked so that they will not expand in the second scan either.
- The prescan is not done when an argument is stringified or concatenated.
- (More precisely, stringification and concatenation use the argument as
- written, in un-prescanned form. The same actual argument would be used in
- prescanned form if it is substituted elsewhere without stringification or
- concatenation.) Thus,
- #define str(s) #s
- #define foo 4
- str (foo)
- expands to `"foo"'. Once more, prescan has been prevented from
- having any noticeable effect.
- You might now ask, "Why mention the prescan, if it makes no difference?
- Why not skip it and make the preprocessor faster?" The answer is that the
- prescan does make a difference in two special cases:
- * Nested calls to a macro.
-
- * Macros that call other macros that stringify or concatenate.
- We say that "nested" calls to a macro occur when a macro's actual
- argument contains a call to that very macro. For example, if `f'
- is a macro that expects one argument, `f (f (1))' is a nested
- pair of calls to `f'. The desired expansion is made by
- expanding `f (1)' and substituting that into the definition of
- `f'. The prescan causes the expected result to happen.
- Without the prescan, `f (1)' itself would be substituted as
- an actual argument, and the inner use of `f' would appear
- during the main scan as an indirect self-reference and would not
- be expanded. Here, the prescan cancels an undesirable side effect
- (in the medical, not computational, sense of the term) of the special
- rule for self-referential macros.
- There is also one case where prescan is useful. It is possible
- to use prescan to expand an argument and then stringify it---if you use
- two levels of macros. Let's add a new macro `xstr' to the
- example shown above:
- #define xstr(s) str(s)
- #define str(s) #s
- #define foo 4
- xstr (foo)
- This expands into `"4"', not `"foo"'. The reason for the
- difference is that the argument of `xstr' is expanded at prescan
- (because `xstr' does not specify stringification or concatenation of
- the argument). The result of prescan then forms the actual argument for
- `str'. `str' uses its argument without prescan because it
- performs strigification; but it cannot prevent or undo the prescanning
- already done by `xstr'.
- File: cpp.info Node: Cascaded Macros, Prev: Argument Prescan, Up: Macro Pitfalls
- Cascaded Use of Macros
- ......................
- A "cascade" of macros is when one macro's body contains a reference
- to another macro. This is very common practice. For example,
- #define BUFSIZE 1020
- #define TABLESIZE BUFSIZE
- 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.
- This makes a difference if you change the definition of `BUFSIZE'
- at some point in the source file. `TABLESIZE', defined as shown,
- will always expand using the definition of `BUFSIZE' that is
- currently in effect:
- #define BUFSIZE 1020
- #define TABLESIZE BUFSIZE
- #undef BUFSIZE
- #define BUFSIZE 37
- Now `TABLESIZE' expands (in two stages) to `37'.
- File: cpp.info Node: Conditionals, Prev: Macros, Up: Top, Next: Combining Sources
- Conditionals
- ============
- In a macro processor, a "conditional" is a command that allows a part
- of the program to be ignored during compilation, on some conditions.
- In the C preprocessor, a conditional can test either an arithmetic expression
- or whether a name is defined as a macro.
- A conditional in the C preprocessor resembles in some ways an `if'
- statement in C, but it is important to understand the difference between
- them. The condition in an `if' statement is tested during the execution
- of your program. Its purpose is to allow your program to behave differently
- from run to run, depending on the data it is operating on. The condition
- in a preprocessor conditional command is tested when your program is compiled.
- Its purpose is to allow different code to be included in the program depending
- on the situation at the time of compilation.
- * Menu:
- * Uses: Conditional Uses. What conditionals are for.
- * Syntax: Conditional Syntax. How conditionals are written.
- * Deletion: Deleted Code. Making code into a comment.
- * Macros: Conditionals-Macros. Why conditionals are used with macros.
- * Errors: #error Command. Detecting inconsistent compilation parameters.
- File: cpp.info Node: Conditional Uses, Prev: Conditionals, Up: Conditionals, Next: Conditional Syntax
- Generally there are three kinds of reason to use a conditional.
- * A program may need to use different code depending on the machine or
- operating system it is to run on. In some cases the code for one
- operating system may be erroneous on another operating system; for
- example, it might refer to library routines that do not exist on the
- other system. When this happens, it is not enough to avoid executing
- the invalid code: merely having it in the program makes it impossible
- to link the program and run it. With a preprocessor conditional, the
- offending code can be effectively excised from the program when it is
- not valid.
-
- * You may want to be able to compile the same source file into two
- different programs. Sometimes the difference between the programs is
- that one makes frequent time-consuming consistency checks on its
- intermediate data while the other does not.
-
- * A conditional whose condition is always false is a good way to exclude
- code from the program but keep it as a sort of comment for future
- reference.
- Most simple programs that are intended to run on only one machine will
- not need to use preprocessor conditionals.
- File: cpp.info Node: Conditional Syntax, Prev: Conditional Uses, Up: Conditionals, Next: Conditionals-Macros
- Syntax of Conditionals
- ----------------------
- A conditional in the C preprocessor begins with a "conditional
- command": `#if', `#ifdef' or `#ifndef'.*Note Conditionals::,
- for info on `#ifdef' and `#ifndef'; only `#if' is explained
- here.
- * Menu:
- * If: #if Command. Basic conditionals using `#if' and `#endif'.
- * Else: #else Command. Including some text if the condition fails.
- * Elif: #elif Command. Testing several alternative possibilities.
- File: cpp.info Node: #if Command, Prev: Conditional Syntax, Up: Conditional Syntax, Next: #else Command
- The `#if' Command
- .................
- The `#if' command in its simplest form consists of
- #if EXPRESSION
- CONTROLLED TEXT
- #endif /* EXPRESSION */
- The comment following the `#endif' is not required, but it is a good
- practice because it helps people match the `#endif' to the
- corresponding `#if'. Such comments should always be used, except in
- short conditionals that are not nested. In fact, you can put anything at
- all after the `#endif' and it will be ignored by the GNU C preprocessor,
- but only comments are acceptable in ANSI Standard C.
- EXPRESSION is a C expression of integer type, subject to stringent
- restrictions. It may contain
- * Integer constants, which are all regarded as `long' or
- `unsigned long'.
-
- * Character constants, which are interpreted according to the character
- set and conventions of the machine and operating system on which the
- preprocessor is running. The GNU C preprocessor uses the C data type
- `char' for these character constants; therefore, whether some
- character codes are negative is determined by the C compiler used to
- compile the preprocessor. If it treats `char' as signed, then
- character codes large enough to set the sign bit will be considered
- negative; otherwise, no character code is considered negative.
-
- * Arithmetic operators for addition, subtraction, multiplication,
- division, bitwise operations, shifts, comparisons, and `&&' and
- `||'.
-
- * Identifiers that are not macros, which are all treated as zero(!).
-
- * Macro calls. All macro calls in the expression are expanded before
- actual computation of the expression's value begins.
- Note that `sizeof' operators and `enum'-type values are not allowed.
- `enum'-type values, like all other identifiers that are not taken
- as macro calls and expanded, are treated as zero.
- The text inside of a conditional can include preprocessor commands. Then
- the commands inside the conditional are obeyed only if that branch of the
- conditional succeeds. The text can also contain other conditional groups.
- However, the `#if''s and `#endif''s must balance.
- File: cpp.info Node: #else Command, Prev: #if Command, Up: Conditional Syntax, Next: #elif Command
- The `#else' Command
- ...................
- The `#else' command can be added a conditional to provide alternative
- text to be used if the condition is false. This looks like
- #if EXPRESSION
- TEXT-IF-TRUE
- #else /* Not EXPRESSION */
- TEXT-IF-FALSE
- #endif /* Not EXPRESSION */
- If EXPRESSION is nonzero, and the TEXT-IF-TRUE is considered
- included, then `#else' acts like a failing conditional and the
- TEXT-IF-FALSE is ignored. Contrariwise, if the `#if'
- conditional fails, the TEXT-IF-FALSE is considered included.
- File: cpp.info Node: #elif Command, Prev: #else Command, Up: Conditional Syntax
- The `#elif' Command
- ...................
- One common case of nested conditionals is used to check for more than two
- possible alternatives. For example, you might have
- #if X == 1
- ...
- #else /* X != 1 */
- #if X == 2
- ...
- #else /* X != 2 */
- ...
- #endif /* X != 2 */
- #endif /* X != 1 */
- Another conditional command, `#elif', allows this to be abbreviated
- as follows:
- #if X == 1
- ...
- #elif X == 2
- ...
- #else /* X != 2 and X != 1*/
- ...
- #endif /* X != 2 and X != 1*/
- `#elif' stands for "else if". Like `#else', it goes in the
- middle of a `#if'-`#endif' pair and subdivides it; it does not
- require a matching `#endif' of its own. Like `#if', the
- `#elif' command includes an expression to be tested.
- The text following the `#elif' is processed only if the original
- `#if'-condition failed and the `#elif' condition succeeeds. More
- than one `#elif' can go in the same `#if'-`#endif' group.
- Then the text after each `#elif' is processed only if the `#elif'
- condition succeeds after the original `#if' and any previous
- `#elif''s within it have failed. `#else' is equivalent to
- `#elif 1', and `#else' is allowed after any number of
- `#elif''s, but `#elif' may not follow a `#else'.
- File: cpp.info Node: Deleted Code, Prev: Conditional Syntax, Up: Conditionals, Next: Conditionals-Macros
- Keeping Deleted Code for Future Reference
- -----------------------------------------
- If you replace or delete a part of the program but want to keep the old
- code around as a comment for future reference, the easy way to do this is
- to put `#if 0' before it and `#endif' after it.
- This works even if the code being turned off contains conditionals, but
- they must be entire conditionals (balanced `#if' and `#endif').
- File: cpp.info Node: Conditionals-Macros, Prev: Deleted Code, Up: Conditionals, Next: #error Command
- Conditionals and Macros
- -----------------------
- Conditionals are rarely useful except in connection with macros. A
- `#if' command whose expression uses no macros is equivalent to
- `#if 1' or `#if 0'; you might as well determine which one, by
- computing the value of the expression yourself, and then simplify the
- program. But when the expression uses macros, its value can vary from
- compilation to compilation.
- For example, here is a conditional that tests the expression
- `BUFSIZE == 1020', where `BUFSIZE' must be a macro.
- #if BUFSIZE == 1020
- printf ("Large buffers!\n");
- #endif /* BUFSIZE is large */
- The special operator `defined' may be used in `#if' expressions to test
- whether a certain name is defined as a macro. Either `defined NAME' or
- `defined (NAME)' is an expression whose value is 1 if NAME is defined as
- macro at the current point in the program, and 0 otherwise. For the
- `defined' operator it makes no difference what the definition of the macro
- is; all that matters is whether there is a definition. Thus, for example,
- #if defined (vax) || defined (ns16000)
- would include the following code if either of the names `vax' and
- `ns16000' is defined as a macro.
- If a macro is defined and later undefined with `#undef',
- subsequent use of the `defined' operator will return 0, because
- the name is no longer defined. If the macro is defined again with
- another `#define', `defined' will recommence returning 1.
- Conditionals that test just the definedness of one name are very common, so
- there are two special short conditional commands for this case. They are
- `#ifdef NAME'
- is equivalent to `#if defined (NAME)'.
-
- `#ifndef NAME'
- is equivalent to `#if ! defined (NAME)'.
- Macro definitions can vary between compilations for several reasons.
- * Some macros are predefined on each kind of machine. For example, on a
- Vax, the name `vax' is a predefined macro. On other machines, it
- would not be defined.
-
- * Many more macros are defined by system header files. Different
- systems and machines define different macros, or give them different
- values. It is useful to test these macros with conditionals to avoid
- using a system feature on a machine where it is not implemented.
-
- * Macros are a common way of allowing users to customize a program for
- different machines or applications. For example, the macro
- `BUFSIZE' might be defined in a configuration file for your
- program that is included as a header file in each source file. You
- would use `BUFSIZE' in a preprocessor conditional in order to
- generate different code depending on the chosen configuration.
-
- * Macros can be defined or undefined with `-D' and `-U'
- command options when you compile the program. You can arrange to
- compile the same source file into two different programs by choosing
- a macro name to specify which program you want, writing conditionals
- to test whether or how this macro is defined, and then controlling
- the state of the macro with compiler command options.
- *Note Invocation::.
- File: cpp.info Node: #error Command, Prev: Conditionals-Macros, Up: Conditionals
- The `#error' Command
- --------------------
- The command `#error' causes the preprocessor to report a fatal
- error. The rest of the line that follows `#error' is used as the
- error message.
- You would use `#error' inside of a conditional that detects a
- combination of parameters which you know the program does not properly
- support. For example, if you know that the program will not run
- properly on a Vax, you might write
- #ifdef vax
- #error Won't work on Vaxen. See comments at get_last_object.
- #endif
- *Note Nonstandard Predefined::, for why this works.
- If you have several configuration parameters that must be set up by
- the installation in a consistent way, you can use conditionals to detect
- an inconsistency and report it with `#error'. For example,
- #if HASH_TABLE_SIZE % 2 == 0 || HASH_TABLE_SIZE % 3 == 0 \
- || HASH_TABLE_SIZE % 5 == 0
- #error HASH_TABLE_SIZE should not be divisible by a small prime
- #endif
- File: cpp.info Node: Combining Sources, Prev: Conditionals, Up: Top, Next: Other Commands
- Combining Source Files
- ======================
- One of the jobs of the C preprocessor is to inform the C compiler of where
- each line of C code came from: which source file and which line number.
- C code can come from multiple source files if you use `#include';
- both `#include' and the use of conditionals and macros can cause
- the line number of a line in the preprocessor output to be different
- from the line's number in the original source file. You will appreciate
- the value of making both the C compiler (in error messages) and symbolic
- debuggers such as GDB use the line numbers in your source file.
- The C preprocessor builds on this feature by offering a command by which
- you can control the feature explicitly. This is useful when a file for
- input to the C preprocessor is the output from another program such as the
- `bison' parser generator, which operates on another file that is the
- true source file. Parts of the output from `bison' are generated from
- scratch, other parts come from a standard parser file. The rest are copied
- nearly verbatim from the source file, but their line numbers in the
- `bison' output are not the same as their original line numbers.
- Naturally you would like compiler error messages and symbolic debuggers to
- know the original source file and line number of each line in the
- `bison' output.
- `bison' arranges this by writing `#line' commands into the output
- file. `#line' is a command that specifies the original line number
- and source file name for subsequent input in the current preprocessor input
- file. `#line' has three variants:
- `#line LINENUM'
- Here LINENUM is a decimal integer constant. This specifies that
- the line number of the following line of input, in its original source file,
- was LINENUM.
-
- `#line LINENUM FILENAME'
- Here LINENUM is a decimal integer constant and FILENAME
- is a string constant. This specifies that the following line of input
- came originally from source file FILENAME and its line number there
- was LINENUM. Keep in mind that FILENAME is not just a
- file name; it is surrounded by doublequote characters so that it looks
- like a string constant.
-
- `#line ANYTHING ELSE'
- ANYTHING ELSE is checked for macro calls, which are expanded.
- The result should be a decimal integer constant followed optionally
- by a string constant, as described above.
- `#line' commands alter the results of the `__FILE__' and
- `__LINE__' predefined macros from that point on. *Note Standard Predefined::.
- File: cpp.info Node: Other Commands, Prev: Combining Sources, Up: Top, Next: Output
- Miscellaneous Preprocessor Commands
- ===================================
- This section describes two additional preprocesor commands. They are
- not very useful, but are mentioned for completeness.
- The "null command" consists of a `#' followed by a Newline, with
- only whitespace (including comments) in between. A null command is
- understood as a preprocessor command but has no effect on the preprocessor
- output. The primary significance of the existence of the null command is
- that an input line consisting of just a `#' will produce no output,
- rather than a line of output containing just a `#'. Supposedly
- some old C programs contain such lines.
- The `#pragma' command is specified in the ANSI standard to have an
- arbitrary implementation-defined effect. In the GNU C preprocessor,
- `#pragma' first attempts to run the game `rogue'; if that fails,
- it tries to run the game `hack'; if that fails, it tries to run
- GNU Emacs displaying the Tower of Hanoi; if that fails, it reports a
- fatal error. In any case, preprocessing does not continue.
- File: cpp.info Node: Output, Prev: Other Commands, Up: Top, Next: Invocation
- C Preprocessor Output
- =====================
- The output from the C preprocessor looks much like the input, except
- that all preprocessor command lines have been replaced with blank lines
- and all comments with spaces. Whitespace within a line is not altered;
- however, a space is inserted after the expansions of most macro calls.
- Source file name and line number information is conveyed by lines of
- the form
- # LINENUM FILENAME
- which are inserted as needed into the middle of the input (but never within
- a string or character constant). Such a line means that the following line
- originated in file FILENAME at line LINENUM.
- File: cpp.info Node: Invocation, Prev: Output, Up: Top
- Invoking the C Preprocessor
- ===========================
- Most often when you use the C preprocessor you will not have to invoke it
- explicitly: the C compiler will do so automatically. However, the
- preprocessor is sometimes useful individually.
- The C preprocessor expects two file names as arguments, INFILE and
- OUTFILE. The preprocessor reads INFILE together with any other
- files it specifies with `#include'. All the output generated by the
- combined input files is written in OUTFILE.
- Either INFILE or OUTFILE may be `-', which as INFILE
- means to read from standard input and as OUTFILE means to write to
- standard output. Also, if OUTFILE or both file names are omitted,
- the standard output and standard input are used for the omitted file names.
- Here is a table of command options accepted by the C preprocessor. Most
- of them can also be given when compiling a C program; they are passed along
- automatically to the preprocessor when it is invoked by the compiler.
- `-P'
- Inhibit generation of `#'-lines with line-number information in
- the output from the preprocessor (*Note Output::). This might be
- useful when running the preprocessor on something that is not C code
- and will be sent to a program which might be confused by the
- `#'-lines
-
- `-C'
- Do not discard comments: pass them through to the output file.
- Comments appearing in arguments of a macro call will be copied to the
- output before the expansion of the macro call.
-
- `-T'
- Process ANSI standard trigraph sequences. These are three-character
- sequences, all starting with `??', that are defined by ANSI C to
- stand for single characters. For example, `??/' stands for
- `\', so `'??/n'' is a character constant for Newline.
- Strictly speaking, the GNU C preprocessor does not support all
- programs in ANSI Standard C unless `-T' is used, but if you
- ever notice the difference it will be with relief.
-
- You don't want to know any more about trigraphs.
-
- `-pedantic'
- Issue warnings required by the ANSI C standard in certain cases such
- as when text other than a comment follows `#else' or `#endif'.
-
- `-I DIRECTORY'
- Add the directory DIRECTORY to the end of the list of
- directories to be searched for header files (*Note Include Syntax::).
- This can be used to override a system header file, substituting your
- own version, since these directories are searched before the system
- header file directories. If you use more than one `-I' option,
- the directories are scanned in left-to-right order; the standard
- system directories come after.
-
- `-D NAME'
- Predefine NAME as a macro, with definition `1'.
-
- `-D NAME=DEFINITION'
- Predefine NAME as a macro, with definition DEFINITION.
- There are no restrictions on the contents of DEFINITION, but if
- you are invoking the preprocessor from a shell or shell-like program
- you may need to use the shell's quoting syntax to protect characters
- such as spaces that have a meaning in the shell syntax.
-
- `-U NAME'
- Do not predefine NAME. If both `-U' and `-D' are
- specified for one name, the `-U' beats the `-D' and the name
- is not predefined.
-
- `-undef'
- Do not predefine any nonstandard macros.
-
- `-d'
- Instead of outputting the result of preprocessing, output a list of
- `#define' commands for all the macros defined during the
- execution of the preprocessor.
-
- `-M'
- Instead of outputting the result of preprocessing, output a rule
- suitable for `make' describing the dependencies of the main
- source file. The preprocessor outputs one `make' rule containing
- the object file name for that source file, a colon, and the names of
- all the included files. If there are many included files then the
- rule is split into several lines using `\'-newline.
-
- This feature is used in automatic updating of makefiles.
-
- `-MM'
- Like `-M' but mention only the files included with `#include
- "FILE"'. System header files included with `#include
- <FILE>' are omitted.
-
- `-i FILE'
- Process FILE as input, discarding the resulting output, before
- processing the regular input file. Because the output generated from
- FILE is discarded, the only effect of `-i FILE' is to
- make the macros defined in FILE available for use in the main
- input.
- File: cpp.info Node: Concept Index, Prev: Invocation, Up: Top, Next: Index
- Concept Index
- *************
- * Menu:
- * cascaded macros: Cascaded Macros.
- * commands: Commands.
- * concatenation: Concatenation.
- * conditionals: Conditionals.
- * header file: Header Files.
- * line control: Combining Sources.
- * macro body uses macro: Cascaded Macros.
- * null command: Other Commands.
- * options: Invocation.
- * output format: Output.
- * predefined macros: Predefined.
- * preprocessor commands: Commands.
- * redefining macros: Redefining.
- * self-reference: Self-Reference.
- * semicolons (after macro calls): Swallow Semicolon.
- * side effects (in macro arguments): Side Effects.
- * stringification: Stringification.
- * undefining macros: Undefining.
- * unsafe macros: Side Effects.
- File: cpp.info Node: Index, Prev: Concept Index, Up: Top
- Index of Commands, Macros and Options
- *************************************
- * Menu:
- * BSD: Nonstandard Predefined.
- * -C: Invocation.
- * -D: Invocation.
- * -d: Invocation.
- * __DATE__: Standard Predefined.
- * defined: Conditionals-Macros.
- * #elif: #elif Command.
- * #else: #else Command.
- * #error: #error Command.
- * __FILE__: Standard Predefined.
- * -I: Invocation.
- * -i: Invocation.
- * #if: Conditional Syntax.
- * #ifdef: Conditionals-Macros.
- * #ifndef: Conditionals-Macros.
- * #include: Include Syntax.
- * #line: Combining Sources.
- * __LINE__: Standard Predefined.
- * -M: Invocation.
- * M68020: Nonstandard Predefined.
- * m68k: Nonstandard Predefined.
- * mc68000: Nonstandard Predefined.
- * -MM: Invocation.
- * ns32000: Nonstandard Predefined.
- * -P: Invocation.
- * -pedantic: Invocation.
- * #pragma: Other Commands.
- * pyr: Nonstandard Predefined.
- * sequent: Nonstandard Predefined.
- * __STDC__: Standard Predefined.
- * sun: Nonstandard Predefined.
- * system header files: Header Uses.
- * -T: Invocation.
- * __TIME__: Standard Predefined.
- * -U: Invocation.
- * -undef: Invocation.
- * unix: Nonstandard Predefined.
- * vax: Nonstandard Predefined.
- Tag table:
- Node: Top742
- Node: Global Actions3291
- Node: Commands5797
- Node: Header Files7393
- Node: Header Uses7728
- Node: Include Syntax9114
- Node: Include Operation11866
- Node: Macros13510
- Node: Simple Macros14417
- Node: Argument Macros17455
- Node: Predefined22546
- Node: Standard Predefined22969
- Node: Nonstandard Predefined27054
- Node: Stringification29853
- Node: Concatenation32685
- Node: Undefining35937
- Node: Redefining36954
- Node: Macro Pitfalls38238
- Node: Misnesting39278
- Node: Macro Parentheses40279
- Node: Swallow Semicolon42126
- Node: Side Effects44012
- Node: Self-Reference45694
- Node: Argument Prescan47932
- Node: Cascaded Macros51637
- Node: Conditionals52654
- Node: Conditional Uses53935
- Node: Conditional Syntax55267
- Node: #if Command55829
- Node: #else Command58086
- Node: #elif Command58724
- Node: Deleted Code60059
- Node: Conditionals-Macros60585
- Node: #error Command63826
- Node: Combining Sources64867
- Node: Other Commands67499
- Node: Output68634
- Node: Invocation69347
- Node: Concept Index73904
- Node: Index74667
- End tag table
|