source: trunk/third/gcc/cpp.texi @ 8834

Revision 8834, 105.3 KB checked in by ghudson, 28 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r8833, which included commits to RCS files with non-trunk default branches.
Line 
1\input texinfo
2@setfilename cpp.info
3@settitle The C Preprocessor
4
5@ignore
6@ifinfo
7@format
8START-INFO-DIR-ENTRY
9* Cpp: (cpp).                   The C preprocessor.
10END-INFO-DIR-ENTRY
11@end format
12@end ifinfo
13@end ignore
14
15@c @smallbook
16@c @cropmarks
17@c @finalout
18@setchapternewpage odd
19@ifinfo
20This file documents the GNU C Preprocessor.
21
22Copyright 1987, 1989, 1991, 1992, 1993, 1994, 1995 Free Software
23Foundation, Inc.
24
25Permission is granted to make and distribute verbatim copies of
26this manual provided the copyright notice and this permission notice
27are preserved on all copies.
28
29@ignore
30Permission is granted to process this file through Tex and print the
31results, provided the printed document carries copying permission
32notice identical to this one except for the removal of this paragraph
33(this paragraph not being relevant to the printed manual).
34
35@end ignore
36Permission is granted to copy and distribute modified versions of this
37manual under the conditions for verbatim copying, provided also that
38the entire resulting derived work is distributed under the terms of a
39permission notice identical to this one.
40
41Permission is granted to copy and distribute translations of this manual
42into another language, under the above conditions for modified versions.
43@end ifinfo
44
45@titlepage
46@c @finalout
47@title The C Preprocessor
48@subtitle Last revised July 1992
49@subtitle for GCC version 2
50@author Richard M. Stallman
51@page
52@vskip 2pc
53This booklet is eventually intended to form the first chapter of a GNU
54C Language manual.
55
56@vskip 0pt plus 1filll
57Copyright @copyright{} 1987, 1989, 1991, 1992, 1993, 1994, 1995 Free
58Software Foundation, Inc.
59
60Permission is granted to make and distribute verbatim copies of
61this manual provided the copyright notice and this permission notice
62are preserved on all copies.
63
64Permission is granted to copy and distribute modified versions of this
65manual under the conditions for verbatim copying, provided also that
66the entire resulting derived work is distributed under the terms of a
67permission notice identical to this one.
68
69Permission is granted to copy and distribute translations of this manual
70into another language, under the above conditions for modified versions.
71@end titlepage
72@page
73
74@node Top, Global Actions,, (DIR)
75@chapter The C Preprocessor
76
77The C preprocessor is a @dfn{macro processor} that is used automatically by
78the C compiler to transform your program before actual compilation.  It is
79called a macro processor because it allows you to define @dfn{macros},
80which are brief abbreviations for longer constructs.
81
82The C preprocessor provides four separate facilities that you can use as
83you see fit:
84
85@itemize @bullet
86@item
87Inclusion of header files.  These are files of declarations that can be
88substituted into your program.
89
90@item
91Macro expansion.  You can define @dfn{macros}, which are abbreviations
92for arbitrary fragments of C code, and then the C preprocessor will
93replace the macros with their definitions throughout the program.
94
95@item
96Conditional compilation.  Using special preprocessing directives, you
97can include or exclude parts of the program according to various
98conditions.
99
100@item
101Line control.  If you use a program to combine or rearrange source files into
102an intermediate file which is then compiled, you can use line control
103to inform the compiler of where each source line originally came from.
104@end itemize
105
106C preprocessors vary in some details.  This manual discusses the GNU C
107preprocessor, the C Compatible Compiler Preprocessor.  The GNU C
108preprocessor provides a superset of the features of ANSI Standard C.
109
110ANSI Standard C requires the rejection of many harmless constructs commonly
111used by today's C programs.  Such incompatibility would be inconvenient for
112users, so the GNU C preprocessor is configured to accept these constructs
113by default.  Strictly speaking, to get ANSI Standard C, you must use the
114options @samp{-trigraphs}, @samp{-undef} and @samp{-pedantic}, but in
115practice the consequences of having strict ANSI Standard C make it
116undesirable to do this.  @xref{Invocation}.
117
118@menu
119* Global Actions::    Actions made uniformly on all input files.
120* Directives::        General syntax of preprocessing directives.
121* Header Files::      How and why to use header files.
122* Macros::            How and why to use macros.
123* Conditionals::      How and why to use conditionals.
124* Combining Sources:: Use of line control when you combine source files.
125* Other Directives::  Miscellaneous preprocessing directives.
126* Output::            Format of output from the C preprocessor.
127* Invocation::        How to invoke the preprocessor; command options.
128* Concept Index::     Index of concepts and terms.
129* Index::             Index of directives, predefined macros and options.
130@end menu
131
132@node Global Actions, Directives, Top, Top
133@section Transformations Made Globally
134
135Most C preprocessor features are inactive unless you give specific directives
136to request their use.  (Preprocessing directives are lines starting with
137@samp{#}; @pxref{Directives}).  But there are three transformations that the
138preprocessor always makes on all the input it receives, even in the absence
139of directives.
140
141@itemize @bullet
142@item
143All C comments are replaced with single spaces.
144
145@item
146Backslash-Newline sequences are deleted, no matter where.  This
147feature allows you to break long lines for cosmetic purposes without
148changing their meaning.
149
150@item
151Predefined macro names are replaced with their expansions
152(@pxref{Predefined}).
153@end itemize
154
155The first two transformations are done @emph{before} nearly all other parsing
156and before preprocessing directives are recognized.  Thus, for example, you
157can split a line cosmetically with Backslash-Newline anywhere (except
158when trigraphs are in use; see below).
159
160@example
161/*
162*/ # /*
163*/ defi\
164ne FO\
165O 10\
16620
167@end example
168
169@noindent
170is equivalent into @samp{#define FOO 1020}.  You can split even an escape
171sequence with Backslash-Newline.  For example, you can split @code{"foo\bar"}
172between the @samp{\} and the @samp{b} to get
173
174@example
175"foo\\
176bar"
177@end example
178
179@noindent
180This behavior is unclean: in all other contexts, a Backslash can be
181inserted in a string constant as an ordinary character by writing a double
182Backslash, and this creates an exception.  But the ANSI C standard requires
183it.  (Strict ANSI C does not allow Newlines in string constants, so they
184do not consider this a problem.)
185
186But there are a few exceptions to all three transformations.
187
188@itemize @bullet
189@item
190C comments and predefined macro names are not recognized inside a
191@samp{#include} directive in which the file name is delimited with
192@samp{<} and @samp{>}.
193
194@item
195C comments and predefined macro names are never recognized within a
196character or string constant.  (Strictly speaking, this is the rule,
197not an exception, but it is worth noting here anyway.)
198
199@item
200Backslash-Newline may not safely be used within an ANSI ``trigraph''.
201Trigraphs are converted before Backslash-Newline is deleted.  If you
202write what looks like a trigraph with a Backslash-Newline inside, the
203Backslash-Newline is deleted as usual, but it is then too late to
204recognize the trigraph.
205
206This exception is relevant only if you use the @samp{-trigraphs}
207option to enable trigraph processing.  @xref{Invocation}.
208@end itemize
209
210@node Directives, Header Files, Global Actions, Top
211@section Preprocessing Directives
212
213@cindex preprocessing directives
214@cindex directives
215Most preprocessor features are active only if you use preprocessing directives
216to request their use.
217
218Preprocessing directives are lines in your program that start with @samp{#}.
219The @samp{#} is followed by an identifier that is the @dfn{directive name}.
220For example, @samp{#define} is the directive that defines a macro.
221Whitespace is also allowed before and after the @samp{#}.
222
223The set of valid directive names is fixed.  Programs cannot define new
224preprocessing directives.
225
226Some directive names require arguments; these make up the rest of the directive
227line and must be separated from the directive name by whitespace.  For example,
228@samp{#define} must be followed by a macro name and the intended expansion
229of the macro.  @xref{Simple Macros}.
230
231A preprocessing directive cannot be more than one line in normal circumstances.
232It may be split cosmetically with Backslash-Newline, but that has no effect
233on its meaning.  Comments containing Newlines can also divide the
234directive into multiple lines, but the comments are changed to Spaces
235before the directive is interpreted.  The only way a significant Newline
236can occur in a preprocessing directive is within a string constant or
237character constant.  Note that
238most C compilers that might be applied to the output from the preprocessor
239do not accept string or character constants containing Newlines.
240
241The @samp{#} and the directive name cannot come from a macro expansion.  For
242example, if @samp{foo} is defined as a macro expanding to @samp{define},
243that does not make @samp{#foo} a valid preprocessing directive.
244
245@node Header Files, Macros, Directives, Top
246@section Header Files
247
248@cindex header file
249A header file is a file containing C declarations and macro definitions
250(@pxref{Macros}) to be shared between several source files.  You request
251the use of a header file in your program with the C preprocessing directive
252@samp{#include}.
253
254@menu
255* Header Uses::         What header files are used for.
256* Include Syntax::      How to write @samp{#include} directives.
257* Include Operation::   What @samp{#include} does.
258* Once-Only::           Preventing multiple inclusion of one header file.
259* Inheritance::         Including one header file in another header file.
260@end menu
261
262@node Header Uses, Include Syntax, Header Files, Header Files
263@subsection Uses of Header Files
264
265Header files serve two kinds of purposes.
266
267@itemize @bullet
268@item
269@findex system header files
270System header files declare the interfaces to parts of the operating
271system.  You include them in your program to supply the definitions and
272declarations you need to invoke system calls and libraries.
273
274@item
275Your own header files contain declarations for interfaces between the
276source files of your program.  Each time you have a group of related
277declarations and macro definitions all or most of which are needed in
278several different source files, it is a good idea to create a header
279file for them.
280@end itemize
281
282Including a header file produces the same results in C compilation as
283copying the header file into each source file that needs it.  But such
284copying would be time-consuming and error-prone.  With a header file, the
285related declarations appear in only one place.  If they need to be changed,
286they can be changed in one place, and programs that include the header file
287will automatically use the new version when next recompiled.  The header
288file eliminates the labor of finding and changing all the copies as well as
289the risk that a failure to find one copy will result in inconsistencies
290within a program.
291
292The usual convention is to give header files names that end with
293@file{.h}.  Avoid unusual characters in header file names, as they
294reduce portability.
295
296@node Include Syntax, Include Operation, Header Uses, Header Files
297@subsection The @samp{#include} Directive
298
299@findex #include
300Both user and system header files are included using the preprocessing
301directive @samp{#include}.  It has three variants:
302
303@table @code
304@item #include <@var{file}>
305This variant is used for system header files.  It searches for a file
306named @var{file} in a list of directories specified by you, then in a
307standard list of system directories.  You specify directories to
308search for header files with the command option @samp{-I}
309(@pxref{Invocation}).  The option @samp{-nostdinc} inhibits searching
310the standard system directories; in this case only the directories
311you specify are searched.
312
313The parsing of this form of @samp{#include} is slightly special
314because comments are not recognized within the @samp{<@dots{}>}.
315Thus, in @samp{#include <x/*y>} the @samp{/*} does not start a comment
316and the directive specifies inclusion of a system header file named
317@file{x/*y}.  Of course, a header file with such a name is unlikely to
318exist on Unix, where shell wildcard features would make it hard to
319manipulate.@refill
320
321The argument @var{file} may not contain a @samp{>} character.  It may,
322however, contain a @samp{<} character.
323
324@item #include "@var{file}"
325This variant is used for header files of your own program.  It
326searches for a file named @var{file} first in the current directory,
327then in the same directories used for system header files.  The
328current directory is the directory of the current input file.  It is
329tried first because it is presumed to be the location of the files
330that the current input file refers to.  (If the @samp{-I-} option is
331used, the special treatment of the current directory is inhibited.)
332
333The argument @var{file} may not contain @samp{"} characters.  If
334backslashes occur within @var{file}, they are considered ordinary text
335characters, not escape characters.  None of the character escape
336sequences appropriate to string constants in C are processed.  Thus,
337@samp{#include "x\n\\y"} specifies a filename containing three
338backslashes.  It is not clear why this behavior is ever useful, but
339the ANSI standard specifies it.
340
341@item #include @var{anything else}
342@cindex computed @samp{#include}
343This variant is called a @dfn{computed #include}.  Any @samp{#include}
344directive whose argument does not fit the above two forms is a computed
345include.  The text @var{anything else} is checked for macro calls,
346which are expanded (@pxref{Macros}).  When this is done, the result
347must fit one of the above two variants---in particular, the expanded
348text must in the end be surrounded by either quotes or angle braces.
349
350This feature allows you to define a macro which controls the file name
351to be used at a later point in the program.  One application of this is
352to allow a site-specific configuration file for your program to specify
353the names of the system include files to be used.  This can help in
354porting the program to various operating systems in which the necessary
355system header files are found in different places.
356@end table
357
358@node Include Operation, Once-Only, Include Syntax, Header Files
359@subsection How @samp{#include} Works
360
361The @samp{#include} directive works by directing the C preprocessor to scan
362the specified file as input before continuing with the rest of the current
363file.  The output from the preprocessor contains the output already
364generated, followed by the output resulting from the included file,
365followed by the output that comes from the text after the @samp{#include}
366directive.  For example, given a header file @file{header.h} as follows,
367
368@example
369char *test ();
370@end example
371
372@noindent
373and a main program called @file{program.c} that uses the header file,
374like this,
375
376@example
377int x;
378#include "header.h"
379
380main ()
381@{
382  printf (test ());
383@}
384@end example
385
386@noindent
387the output generated by the C preprocessor for @file{program.c} as input
388would be
389
390@example
391int x;
392char *test ();
393
394main ()
395@{
396  printf (test ());
397@}
398@end example
399
400Included files are not limited to declarations and macro definitions; those
401are merely the typical uses.  Any fragment of a C program can be included
402from another file.  The include file could even contain the beginning of a
403statement that is concluded in the containing file, or the end of a
404statement that was started in the including file.  However, a comment or a
405string or character constant may not start in the included file and finish
406in the including file.  An unterminated comment, string constant or
407character constant in an included file is considered to end (with an error
408message) at the end of the file.
409
410It is possible for a header file to begin or end a syntactic unit such
411as a function definition, but that would be very confusing, so don't do
412it.
413
414The line following the @samp{#include} directive is always treated as a
415separate line by the C preprocessor even if the included file lacks a final
416newline.
417
418@node Once-Only, Inheritance, Include Operation, Header Files
419@subsection Once-Only Include Files
420@cindex repeated inclusion
421@cindex including just once
422
423Very often, one header file includes another.  It can easily result that a
424certain header file is included more than once.  This may lead to errors,
425if the header file defines structure types or typedefs, and is certainly
426wasteful.  Therefore, we often wish to prevent multiple inclusion of a
427header file.
428
429The standard way to do this is to enclose the entire real contents of the
430file in a conditional, like this:
431
432@example
433#ifndef FILE_FOO_SEEN
434#define FILE_FOO_SEEN
435
436@var{the entire file}
437
438#endif /* FILE_FOO_SEEN */
439@end example
440
441The macro @code{FILE_FOO_SEEN} indicates that the file has been included
442once already.  In a user header file, the macro name should not begin
443with @samp{_}.  In a system header file, this name should begin with
444@samp{__} to avoid conflicts with user programs.  In any kind of header
445file, the macro name should contain the name of the file and some
446additional text, to avoid conflicts with other header files.
447
448The GNU C preprocessor is programmed to notice when a header file uses
449this particular construct and handle it efficiently.  If a header file
450is contained entirely in a @samp{#ifndef} conditional, then it records
451that fact.  If a subsequent @samp{#include} specifies the same file,
452and the macro in the @samp{#ifndef} is already defined, then the file
453is entirely skipped, without even reading it.
454
455@findex #pragma once
456There is also an explicit directive to tell the preprocessor that it need
457not include a file more than once.  This is called @samp{#pragma once},
458and was used @emph{in addition to} the @samp{#ifndef} conditional around
459the contents of the header file.  @samp{#pragma once} is now obsolete
460and should not be used at all.
461
462@findex #import
463In the Objective C language, there is a variant of @samp{#include}
464called @samp{#import} which includes a file, but does so at most once.
465If you use @samp{#import} @emph{instead of} @samp{#include}, then you
466don't need the conditionals inside the header file to prevent multiple
467execution of the contents.
468
469@samp{#import} is obsolete because it is not a well designed feature.
470It requires the users of a header file---the applications
471programmers---to know that a certain header file should only be included
472once.  It is much better for the header file's implementor to write the
473file so that users don't need to know this.  Using @samp{#ifndef}
474accomplishes this goal.
475
476@node Inheritance,, Once-Only, Header Files
477@subsection Inheritance and Header Files
478@cindex inheritance
479@cindex overriding a header file
480
481@dfn{Inheritance} is what happens when one object or file derives some
482of its contents by virtual copying from another object or file.  In
483the case of C header files, inheritance means that one header file
484includes another header file and then replaces or adds something.
485
486If the inheriting header file and the base header file have different
487names, then inheritance is straightforward: simply write @samp{#include
488"@var{base}"} in the inheriting file.
489
490Sometimes it is necessary to give the inheriting file the same name as
491the base file.  This is less straightforward.
492
493For example, suppose an application program uses the system header file
494@file{sys/signal.h}, but the version of @file{/usr/include/sys/signal.h}
495on a particular system doesn't do what the application program expects.
496It might be convenient to define a ``local'' version, perhaps under the
497name @file{/usr/local/include/sys/signal.h}, to override or add to the
498one supplied by the system.
499
500You can do this by using the option @samp{-I.} for compilation, and
501writing a file @file{sys/signal.h} that does what the application
502program expects.  But making this file include the standard
503@file{sys/signal.h} is not so easy---writing @samp{#include
504<sys/signal.h>} in that file doesn't work, because it includes your own
505version of the file, not the standard system version.  Used in that file
506itself, this leads to an infinite recursion and a fatal error in
507compilation.
508
509@samp{#include </usr/include/sys/signal.h>} would find the proper file,
510but that is not clean, since it makes an assumption about where the
511system header file is found.  This is bad for maintenance, since it
512means that any change in where the system's header files are kept
513requires a change somewhere else.
514
515@findex #include_next
516The clean way to solve this problem is to use
517@samp{#include_next}, which means, ``Include the @emph{next} file with
518this name.''  This directive works like @samp{#include} except in
519searching for the specified file: it starts searching the list of header
520file directories @emph{after} the directory in which the current file
521was found.
522
523Suppose you specify @samp{-I /usr/local/include}, and the list of
524directories to search also includes @file{/usr/include}; and suppose that
525both directories contain a file named @file{sys/signal.h}.  Ordinary
526@samp{#include <sys/signal.h>} finds the file under
527@file{/usr/local/include}.  If that file contains @samp{#include_next
528<sys/signal.h>}, it starts searching after that directory, and finds the
529file in @file{/usr/include}.
530
531@node Macros, Conditionals, Header Files, Top
532@section Macros
533
534A macro is a sort of abbreviation which you can define once and then
535use later.  There are many complicated features associated with macros
536in the C preprocessor.
537
538@menu
539* Simple Macros::    Macros that always expand the same way.
540* Argument Macros::  Macros that accept arguments that are substituted
541                       into the macro expansion.
542* Predefined::       Predefined macros that are always available.
543* Stringification::  Macro arguments converted into string constants.
544* Concatenation::    Building tokens from parts taken from macro arguments.
545* Undefining::       Cancelling a macro's definition.
546* Redefining::       Changing a macro's definition.
547* Macro Pitfalls::   Macros can confuse the unwary.  Here we explain
548                       several common problems and strange features.
549@end menu
550
551@node Simple Macros, Argument Macros, Macros, Macros
552@subsection Simple Macros
553@cindex simple macro
554@cindex manifest constant
555
556A @dfn{simple macro} is a kind of abbreviation.  It is a name which
557stands for a fragment of code.  Some people refer to these as
558@dfn{manifest constants}.
559
560Before you can use a macro, you must @dfn{define} it explicitly with the
561@samp{#define} directive.  @samp{#define} is followed by the name of the
562macro and then the code it should be an abbreviation for.  For example,
563
564@example
565#define BUFFER_SIZE 1020
566@end example
567
568@noindent
569defines a macro named @samp{BUFFER_SIZE} as an abbreviation for the text
570@samp{1020}.  If somewhere after this @samp{#define} directive there comes
571a C statement of the form
572
573@example
574foo = (char *) xmalloc (BUFFER_SIZE);
575@end example
576
577@noindent
578then the C preprocessor will recognize and @dfn{expand} the macro
579@samp{BUFFER_SIZE}, resulting in
580
581@example
582foo = (char *) xmalloc (1020);
583@end example
584
585The use of all upper case for macro names is a standard convention.
586Programs are easier to read when it is possible to tell at a glance which
587names are macros.
588
589Normally, a macro definition must be a single line, like all C
590preprocessing directives.  (You can split a long macro definition
591cosmetically with Backslash-Newline.)  There is one exception: Newlines
592can be included in the macro definition if within a string or character
593constant.  This is because it is not possible for a macro definition to
594contain an unbalanced quote character; the definition automatically
595extends to include the matching quote character that ends the string or
596character constant.  Comments within a macro definition may contain
597Newlines, which make no difference since the comments are entirely
598replaced with Spaces regardless of their contents.
599
600Aside from the above, there is no restriction on what can go in a macro
601body.  Parentheses need not balance.  The body need not resemble valid C
602code.  (But if it does not, you may get error messages from the C
603compiler when you use the macro.)
604
605The C preprocessor scans your program sequentially, so macro definitions
606take effect at the place you write them.  Therefore, the following input to
607the C preprocessor
608
609@example
610foo = X;
611#define X 4
612bar = X;
613@end example
614
615@noindent
616produces as output
617
618@example
619foo = X;
620
621bar = 4;
622@end example
623
624After the preprocessor expands a macro name, the macro's definition body is
625appended to the front of the remaining input, and the check for macro calls
626continues.  Therefore, the macro body can contain calls to other macros.
627For example, after
628
629@example
630#define BUFSIZE 1020
631#define TABLESIZE BUFSIZE
632@end example
633
634@noindent
635the name @samp{TABLESIZE} when used in the program would go through two
636stages of expansion, resulting ultimately in @samp{1020}.
637
638This is not at all the same as defining @samp{TABLESIZE} to be @samp{1020}.
639The @samp{#define} for @samp{TABLESIZE} uses exactly the body you
640specify---in this case, @samp{BUFSIZE}---and does not check to see whether
641it too is the name of a macro.  It's only when you @emph{use} @samp{TABLESIZE}
642that the result of its expansion is checked for more macro names.
643@xref{Cascaded Macros}.
644
645@node Argument Macros, Predefined, Simple Macros, Macros
646@subsection Macros with Arguments
647@cindex macros with argument
648@cindex arguments in macro definitions
649@cindex function-like macro
650
651A simple macro always stands for exactly the same text, each time it is
652used.  Macros can be more flexible when they accept @dfn{arguments}.
653Arguments are fragments of code that you supply each time the macro is
654used.  These fragments are included in the expansion of the macro
655according to the directions in the macro definition.  A macro that
656accepts arguments is called a @dfn{function-like macro} because the
657syntax for using it looks like a function call.
658
659@findex #define
660To define a macro that uses arguments, you write a @samp{#define} directive
661with a list of @dfn{argument names} in parentheses after the name of the
662macro.  The argument names may be any valid C identifiers, separated by
663commas and optionally whitespace.  The open-parenthesis must follow the
664macro name immediately, with no space in between.
665
666For example, here is a macro that computes the minimum of two numeric
667values, as it is defined in many C programs:
668
669@example
670#define min(X, Y)  ((X) < (Y) ? (X) : (Y))
671@end example
672
673@noindent
674(This is not the best way to define a ``minimum'' macro in GNU C.
675@xref{Side Effects}, for more information.)
676
677To use a macro that expects arguments, you write the name of the macro
678followed by a list of @dfn{actual arguments} in parentheses, separated by
679commas.  The number of actual arguments you give must match the number of
680arguments the macro expects.   Examples of use of the macro @samp{min}
681include @samp{min (1, 2)} and @samp{min (x + 28, *p)}.
682
683The expansion text of the macro depends on the arguments you use.
684Each of the argument names of the macro is replaced, throughout the
685macro definition, with the corresponding actual argument.  Using the
686same macro @samp{min} defined above, @samp{min (1, 2)} expands into
687
688@example
689((1) < (2) ? (1) : (2))
690@end example
691
692@noindent
693where @samp{1} has been substituted for @samp{X} and @samp{2} for @samp{Y}.
694
695Likewise, @samp{min (x + 28, *p)} expands into
696
697@example
698((x + 28) < (*p) ? (x + 28) : (*p))
699@end example
700
701Parentheses in the actual arguments must balance; a comma within
702parentheses does not end an argument.  However, there is no requirement
703for brackets or braces to balance, and they do not prevent a comma from
704separating arguments.  Thus,
705
706@example
707macro (array[x = y, x + 1])
708@end example
709
710@noindent
711passes two arguments to @code{macro}: @samp{array[x = y} and @samp{x +
7121]}.  If you want to supply @samp{array[x = y, x + 1]} as an argument,
713you must write it as @samp{array[(x = y, x + 1)]}, which is equivalent C
714code.
715
716After the actual arguments are substituted into the macro body, the entire
717result is appended to the front of the remaining input, and the check for
718macro calls continues.  Therefore, the actual arguments can contain calls
719to other macros, either with or without arguments, or even to the same
720macro.  The macro body can also contain calls to other macros.  For
721example, @samp{min (min (a, b), c)} expands into this text:
722
723@example
724((((a) < (b) ? (a) : (b))) < (c)
725 ? (((a) < (b) ? (a) : (b)))
726 : (c))
727@end example
728
729@noindent
730(Line breaks shown here for clarity would not actually be generated.)
731
732@cindex blank macro arguments
733@cindex space as macro argument
734If a macro @code{foo} takes one argument, and you want to supply an
735empty argument, you must write at least some whitespace between the
736parentheses, like this: @samp{foo ( )}.  Just @samp{foo ()} is providing
737no arguments, which is an error if @code{foo} expects an argument.  But
738@samp{foo0 ()} is the correct way to call a macro defined to take zero
739arguments, like this:
740
741@example
742#define foo0() @dots{}
743@end example
744
745If you use the macro name followed by something other than an
746open-parenthesis (after ignoring any spaces, tabs and comments that
747follow), it is not a call to the macro, and the preprocessor does not
748change what you have written.  Therefore, it is possible for the same name
749to be a variable or function in your program as well as a macro, and you
750can choose in each instance whether to refer to the macro (if an actual
751argument list follows) or the variable or function (if an argument list
752does not follow).
753
754Such dual use of one name could be confusing and should be avoided
755except when the two meanings are effectively synonymous: that is, when the
756name is both a macro and a function and the two have similar effects.  You
757can think of the name simply as a function; use of the name for purposes
758other than calling it (such as, to take the address) will refer to the
759function, while calls will expand the macro and generate better but
760equivalent code.  For example, you can use a function named @samp{min} in
761the same source file that defines the macro.  If you write @samp{&min} with
762no argument list, you refer to the function.  If you write @samp{min (x,
763bb)}, with an argument list, the macro is expanded.  If you write
764@samp{(min) (a, bb)}, where the name @samp{min} is not followed by an
765open-parenthesis, the macro is not expanded, so you wind up with a call to
766the function @samp{min}.
767
768You may not define the same name as both a simple macro and a macro with
769arguments.
770
771In the definition of a macro with arguments, the list of argument names
772must follow the macro name immediately with no space in between.  If there
773is a space after the macro name, the macro is defined as taking no
774arguments, and all the rest of the line is taken to be the expansion.  The
775reason for this is that it is often useful to define a macro that takes no
776arguments and whose definition begins with an identifier in parentheses.
777This rule about spaces makes it possible for you to do either this:
778
779@example
780#define FOO(x) - 1 / (x)
781@end example
782
783@noindent
784(which defines @samp{FOO} to take an argument and expand into minus the
785reciprocal of that argument) or this:
786
787@example
788#define BAR (x) - 1 / (x)
789@end example
790
791@noindent
792(which defines @samp{BAR} to take no argument and always expand into
793@samp{(x) - 1 / (x)}).
794
795Note that the @emph{uses} of a macro with arguments can have spaces before
796the left parenthesis; it's the @emph{definition} where it matters whether
797there is a space.
798
799@node Predefined, Stringification, Argument Macros, Macros
800@subsection Predefined Macros
801
802@cindex predefined macros
803Several simple macros are predefined.  You can use them without giving
804definitions for them.  They fall into two classes: standard macros and
805system-specific macros.
806
807@menu
808* Standard Predefined::     Standard predefined macros.
809* Nonstandard Predefined::  Nonstandard predefined macros.
810@end menu
811
812@node Standard Predefined, Nonstandard Predefined, Predefined, Predefined
813@subsubsection Standard Predefined Macros
814@cindex standard predefined macros
815
816The standard predefined macros are available with the same meanings
817regardless of the machine or operating system on which you are using GNU C.
818Their names all start and end with double underscores.  Those preceding
819@code{__GNUC__} in this table are standardized by ANSI C; the rest are
820GNU C extensions.
821
822@table @code
823@item __FILE__
824@findex __FILE__
825This macro expands to the name of the current input file, in the form of
826a C string constant.  The precise name returned is the one that was
827specified in @samp{#include} or as the input file name argument.
828
829@item __LINE__
830@findex __LINE__
831This macro expands to the current input line number, in the form of a
832decimal integer constant.  While we call it a predefined macro, it's
833a pretty strange macro, since its ``definition'' changes with each
834new line of source code.
835
836This and @samp{__FILE__} are useful in generating an error message to
837report an inconsistency detected by the program; the message can state
838the source line at which the inconsistency was detected.  For example,
839
840@smallexample
841fprintf (stderr, "Internal error: "
842                 "negative string length "
843                 "%d at %s, line %d.",
844         length, __FILE__, __LINE__);
845@end smallexample
846
847A @samp{#include} directive changes the expansions of @samp{__FILE__}
848and @samp{__LINE__} to correspond to the included file.  At the end of
849that file, when processing resumes on the input file that contained
850the @samp{#include} directive, the expansions of @samp{__FILE__} and
851@samp{__LINE__} revert to the values they had before the
852@samp{#include} (but @samp{__LINE__} is then incremented by one as
853processing moves to the line after the @samp{#include}).
854
855The expansions of both @samp{__FILE__} and @samp{__LINE__} are altered
856if a @samp{#line} directive is used.  @xref{Combining Sources}.
857
858@item __DATE__
859@findex __DATE__
860This macro expands to a string constant that describes the date on
861which the preprocessor is being run.  The string constant contains
862eleven characters and looks like @samp{"Jan 29 1987"} or @w{@samp{"Apr
8631 1905"}}.
864
865@item __TIME__
866@findex __TIME__
867This macro expands to a string constant that describes the time at
868which the preprocessor is being run.  The string constant contains
869eight characters and looks like @samp{"23:59:01"}.
870
871@item __STDC__
872@findex __STDC__
873This macro expands to the constant 1, to signify that this is ANSI
874Standard C.  (Whether that is actually true depends on what C compiler
875will operate on the output from the preprocessor.)
876
877@item __STDC_VERSION__
878@findex __STDC_VERSION__
879This macro expands to the C Standard's version number,
880a long integer constant of the form @samp{@var{yyyy}@var{mm}L}
881where @var{yyyy} and @var{mm} are the year and month of the Standard version.
882This signifies which version of the C Standard the preprocessor conforms to.
883Like @samp{__STDC__}, whether this version number is accurate
884for the entire implementation depends on what C compiler
885will operate on the output from the preprocessor.
886
887@item __GNUC__
888@findex __GNUC__
889This macro is defined if and only if this is GNU C.  This macro is
890defined only when the entire GNU C compiler is in use; if you invoke the
891preprocessor directly, @samp{__GNUC__} is undefined.  The value
892identifies the major version number of GNU CC (@samp{1} for GNU CC
893version 1, which is now obsolete, and @samp{2} for version 2).
894
895@item __GNUC_MINOR__
896@findex __GNUC_MINOR__
897The macro contains the minor version number of the compiler.  This can
898be used to work around differences between different releases of the
899compiler (for example, if gcc 2.6.3 is known to support a feature, you
900can test for @code{__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6)}).
901The last number, @samp{3} in the
902example above, denotes the bugfix level of the compiler; no macro
903contains this value.
904
905@item __GNUG__
906@findex __GNUG__
907The GNU C compiler defines this when the compilation language is
908C++; use @samp{__GNUG__} to distinguish between GNU C and GNU
909C++.
910
911@item __cplusplus
912@findex __cplusplus
913The draft ANSI standard for C++ used to require predefining this
914variable.  Though it is no longer required, GNU C++ continues to define
915it, as do other popular C++ compilers.  You can use @samp{__cplusplus}
916to test whether a header is compiled by a C compiler or a C++ compiler.
917
918@item __STRICT_ANSI__
919@findex __STRICT_ANSI__
920This macro is defined if and only if the @samp{-ansi} switch was
921specified when GNU C was invoked.  Its definition is the null string.
922This macro exists primarily to direct certain GNU header files not to
923define certain traditional Unix constructs which are incompatible with
924ANSI C.
925
926@item __BASE_FILE__
927@findex __BASE_FILE__
928This macro expands to the name of the main input file, in the form
929of a C string constant.  This is the source file that was specified
930as an argument when the C compiler was invoked.
931
932@item __INCLUDE_LEVEL__
933@findex __INCLUDE_LEVEL_
934This macro expands to a decimal integer constant that represents the
935depth of nesting in include files.  The value of this macro is
936incremented on every @samp{#include} directive and decremented at every
937end of file.  For input files specified by command line arguments,
938the nesting level is zero.
939
940@item __VERSION__
941@findex __VERSION__
942This macro expands to a string which describes the version number of
943GNU C.  The string is normally a sequence of decimal numbers separated
944by periods, such as @samp{"2.6.0"}.  The only reasonable use of this
945macro is to incorporate it into a string constant.
946
947@item __OPTIMIZE__
948@findex __OPTIMIZE__
949This macro is defined in optimizing compilations.  It causes certain
950GNU header files to define alternative macro definitions for some
951system library functions.  It is unwise to refer to or test the
952definition of this macro unless you make very sure that programs will
953execute with the same effect regardless.
954
955@item __CHAR_UNSIGNED__
956@findex __CHAR_UNSIGNED__
957This macro is defined if and only if the data type @code{char} is
958unsigned on the target machine.  It exists to cause the standard
959header file @file{limit.h} to work correctly.  It is bad practice
960to refer to this macro yourself; instead, refer to the standard
961macros defined in @file{limit.h}.  The preprocessor uses
962this macro to determine whether or not to sign-extend large character
963constants written in octal; see @ref{#if Directive,,The @samp{#if} Directive}.
964
965@item __REGISTER_PREFIX__
966@findex __REGISTER_PREFIX__
967This macro expands to a string describing the prefix applied to cpu
968registers in assembler code.  It can be used to write assembler code
969that is usable in multiple environments.  For example, in the
970@samp{m68k-aout} environment it expands to the string @samp{""},
971but in the @samp{m68k-coff} environment it expands to the string
972@samp{"%"}.
973
974@item __USER_LABEL_PREFIX__
975@findex __USER_LABEL_PREFIX__
976This macro expands to a string describing the prefix applied to
977user generated labels in assembler code.  It can be used to write
978assembler code that is usable in multiple environments.
979For example, in the @samp{m68k-aout} environment it expands to the
980string @samp{"_"}, but in the @samp{m68k-coff} environment it expands
981to the string @samp{""}.
982@end table
983
984@node Nonstandard Predefined,, Standard Predefined, Predefined
985@subsubsection Nonstandard Predefined Macros
986
987The C preprocessor normally has several predefined macros that vary between
988machines because their purpose is to indicate what type of system and
989machine is in use.  This manual, being for all systems and machines, cannot
990tell you exactly what their names are; instead, we offer a list of some
991typical ones.  You can use @samp{cpp -dM} to see the values of
992predefined macros; see @ref{Invocation}.
993
994Some nonstandard predefined macros describe the operating system in use,
995with more or less specificity.  For example,
996
997@table @code
998@item unix
999@findex unix
1000@samp{unix} is normally predefined on all Unix systems.
1001
1002@item BSD
1003@findex BSD
1004@samp{BSD} is predefined on recent versions of Berkeley Unix
1005(perhaps only in version 4.3).
1006@end table
1007
1008Other nonstandard predefined macros describe the kind of CPU, with more or
1009less specificity.  For example,
1010
1011@table @code
1012@item vax
1013@findex vax
1014@samp{vax} is predefined on Vax computers.
1015
1016@item mc68000
1017@findex mc68000
1018@samp{mc68000} is predefined on most computers whose CPU is a Motorola
101968000, 68010 or 68020.
1020
1021@item m68k
1022@findex m68k
1023@samp{m68k} is also predefined on most computers whose CPU is a 68000,
102468010 or 68020; however, some makers use @samp{mc68000} and some use
1025@samp{m68k}.  Some predefine both names.  What happens in GNU C
1026depends on the system you are using it on.
1027
1028@item M68020
1029@findex M68020
1030@samp{M68020} has been observed to be predefined on some systems that
1031use 68020 CPUs---in addition to @samp{mc68000} and @samp{m68k}, which
1032are less specific.
1033
1034@item _AM29K
1035@findex _AM29K
1036@itemx _AM29000
1037@findex _AM29000
1038Both @samp{_AM29K} and @samp{_AM29000} are predefined for the AMD 29000
1039CPU family.
1040
1041@item ns32000
1042@findex ns32000
1043@samp{ns32000} is predefined on computers which use the National
1044Semiconductor 32000 series CPU.
1045@end table
1046
1047Yet other nonstandard predefined macros describe the manufacturer of
1048the system.  For example,
1049
1050@table @code
1051@item sun
1052@findex sun
1053@samp{sun} is predefined on all models of Sun computers.
1054
1055@item pyr
1056@findex pyr
1057@samp{pyr} is predefined on all models of Pyramid computers.
1058
1059@item sequent
1060@findex sequent
1061@samp{sequent} is predefined on all models of Sequent computers.
1062@end table
1063
1064These predefined symbols are not only nonstandard, they are contrary to the
1065ANSI standard because their names do not start with underscores.
1066Therefore, the option @samp{-ansi} inhibits the definition of these
1067symbols.
1068
1069This tends to make @samp{-ansi} useless, since many programs depend on the
1070customary nonstandard predefined symbols.  Even system header files check
1071them and will generate incorrect declarations if they do not find the names
1072that are expected.  You might think that the header files supplied for the
1073Uglix computer would not need to test what machine they are running on,
1074because they can simply assume it is the Uglix; but often they do, and they
1075do so using the customary names.  As a result, very few C programs will
1076compile with @samp{-ansi}.  We intend to avoid such problems on the GNU
1077system.
1078
1079What, then, should you do in an ANSI C program to test the type of machine
1080it will run on?
1081
1082GNU C offers a parallel series of symbols for this purpose, whose names
1083are made from the customary ones by adding @samp{__} at the beginning
1084and end.  Thus, the symbol @code{__vax__} would be available on a Vax,
1085and so on.
1086
1087The set of nonstandard predefined names in the GNU C preprocessor is
1088controlled (when @code{cpp} is itself compiled) by the macro
1089@samp{CPP_PREDEFINES}, which should be a string containing @samp{-D}
1090options, separated by spaces.  For example, on the Sun 3, we use the
1091following definition:
1092
1093@example
1094#define CPP_PREDEFINES "-Dmc68000 -Dsun -Dunix -Dm68k"
1095@end example
1096
1097@noindent
1098This macro is usually specified in @file{tm.h}.
1099
1100@node Stringification, Concatenation, Predefined, Macros
1101@subsection Stringification
1102
1103@cindex stringification
1104@dfn{Stringification} means turning a code fragment into a string constant
1105whose contents are the text for the code fragment.  For example,
1106stringifying @samp{foo (z)} results in @samp{"foo (z)"}.
1107
1108In the C preprocessor, stringification is an option available when macro
1109arguments are substituted into the macro definition.  In the body of the
1110definition, when an argument name appears, the character @samp{#} before
1111the name specifies stringification of the corresponding actual argument
1112when it is substituted at that point in the definition.  The same argument
1113may be substituted in other places in the definition without
1114stringification if the argument name appears in those places with no
1115@samp{#}.
1116
1117Here is an example of a macro definition that uses stringification:
1118
1119@smallexample
1120@group
1121#define WARN_IF(EXP) \
1122do @{ if (EXP) \
1123        fprintf (stderr, "Warning: " #EXP "\n"); @} \
1124while (0)
1125@end group
1126@end smallexample
1127
1128@noindent
1129Here the actual argument for @samp{EXP} is substituted once as given,
1130into the @samp{if} statement, and once as stringified, into the
1131argument to @samp{fprintf}.  The @samp{do} and @samp{while (0)} are
1132a kludge to make it possible to write @samp{WARN_IF (@var{arg});},
1133which the resemblance of @samp{WARN_IF} to a function would make
1134C programmers want to do; see @ref{Swallow Semicolon}.
1135
1136The stringification feature is limited to transforming one macro argument
1137into one string constant: there is no way to combine the argument with
1138other text and then stringify it all together.  But the example above shows
1139how an equivalent result can be obtained in ANSI Standard C using the
1140feature that adjacent string constants are concatenated as one string
1141constant.  The preprocessor stringifies the actual value of @samp{EXP}
1142into a separate string constant, resulting in text like
1143
1144@smallexample
1145@group
1146do @{ if (x == 0) \
1147        fprintf (stderr, "Warning: " "x == 0" "\n"); @} \
1148while (0)
1149@end group
1150@end smallexample
1151
1152@noindent
1153but the C compiler then sees three consecutive string constants and
1154concatenates them into one, producing effectively
1155
1156@smallexample
1157do @{ if (x == 0) \
1158        fprintf (stderr, "Warning: x == 0\n"); @} \
1159while (0)
1160@end smallexample
1161
1162Stringification in C involves more than putting doublequote characters
1163around the fragment; it is necessary to put backslashes in front of all
1164doublequote characters, and all backslashes in string and character
1165constants, in order to get a valid C string constant with the proper
1166contents.  Thus, stringifying @samp{p = "foo\n";} results in @samp{"p =
1167\"foo\\n\";"}.  However, backslashes that are not inside of string or
1168character constants are not duplicated: @samp{\n} by itself stringifies to
1169@samp{"\n"}.
1170
1171Whitespace (including comments) in the text being stringified is handled
1172according to precise rules.  All leading and trailing whitespace is ignored.
1173Any sequence of whitespace in the middle of the text is converted to
1174a single space in the stringified result.
1175
1176@node Concatenation, Undefining, Stringification, Macros
1177@subsection Concatenation
1178@cindex concatenation
1179@cindex @samp{##}
1180@dfn{Concatenation} means joining two strings into one.  In the context
1181of macro expansion, concatenation refers to joining two lexical units
1182into one longer one.  Specifically, an actual argument to the macro can be
1183concatenated with another actual argument or with fixed text to produce
1184a longer name.  The longer name might be the name of a function,
1185variable or type, or a C keyword; it might even be the name of another
1186macro, in which case it will be expanded.
1187
1188When you define a macro, you request concatenation with the special
1189operator @samp{##} in the macro body.  When the macro is called,
1190after actual arguments are substituted, all @samp{##} operators are
1191deleted, and so is any whitespace next to them (including whitespace
1192that was part of an actual argument).  The result is to concatenate
1193the syntactic tokens on either side of the @samp{##}.
1194
1195Consider a C program that interprets named commands.  There probably needs
1196to be a table of commands, perhaps an array of structures declared as
1197follows:
1198
1199@example
1200struct command
1201@{
1202  char *name;
1203  void (*function) ();
1204@};
1205
1206struct command commands[] =
1207@{
1208  @{ "quit", quit_command@},
1209  @{ "help", help_command@},
1210  @dots{}
1211@};
1212@end example
1213
1214It would be cleaner not to have to give each command name twice, once in
1215the string constant and once in the function name.  A macro which takes the
1216name of a command as an argument can make this unnecessary.  The string
1217constant can be created with stringification, and the function name by
1218concatenating the argument with @samp{_command}.  Here is how it is done:
1219
1220@example
1221#define COMMAND(NAME)  @{ #NAME, NAME ## _command @}
1222
1223struct command commands[] =
1224@{
1225  COMMAND (quit),
1226  COMMAND (help),
1227  @dots{}
1228@};
1229@end example
1230
1231The usual case of concatenation is concatenating two names (or a name and a
1232number) into a longer name.  But this isn't the only valid case.  It is
1233also possible to concatenate two numbers (or a number and a name, such as
1234@samp{1.5} and @samp{e3}) into a number.  Also, multi-character operators
1235such as @samp{+=} can be formed by concatenation.  In some cases it is even
1236possible to piece together a string constant.  However, two pieces of text
1237that don't together form a valid lexical unit cannot be concatenated.  For
1238example, concatenation with @samp{x} on one side and @samp{+} on the other
1239is not meaningful because those two characters can't fit together in any
1240lexical unit of C.  The ANSI standard says that such attempts at
1241concatenation are undefined, but in the GNU C preprocessor it is well
1242defined: it puts the @samp{x} and @samp{+} side by side with no particular
1243special results.
1244
1245Keep in mind that the C preprocessor converts comments to whitespace before
1246macros are even considered.  Therefore, you cannot create a comment by
1247concatenating @samp{/} and @samp{*}: the @samp{/*} sequence that starts a
1248comment is not a lexical unit, but rather the beginning of a ``long'' space
1249character.  Also, you can freely use comments next to a @samp{##} in a
1250macro definition, or in actual arguments that will be concatenated, because
1251the comments will be converted to spaces at first sight, and concatenation
1252will later discard the spaces.
1253
1254@node Undefining, Redefining, Concatenation, Macros
1255@subsection Undefining Macros
1256
1257@cindex undefining macros
1258To @dfn{undefine} a macro means to cancel its definition.  This is done
1259with the @samp{#undef} directive.  @samp{#undef} is followed by the macro
1260name to be undefined.
1261
1262Like definition, undefinition occurs at a specific point in the source
1263file, and it applies starting from that point.  The name ceases to be a
1264macro name, and from that point on it is treated by the preprocessor as if
1265it had never been a macro name.
1266
1267For example,
1268
1269@example
1270#define FOO 4
1271x = FOO;
1272#undef FOO
1273x = FOO;
1274@end example
1275
1276@noindent
1277expands into
1278
1279@example
1280x = 4;
1281
1282x = FOO;
1283@end example
1284
1285@noindent
1286In this example, @samp{FOO} had better be a variable or function as well
1287as (temporarily) a macro, in order for the result of the expansion to be
1288valid C code.
1289
1290The same form of @samp{#undef} directive will cancel definitions with
1291arguments or definitions that don't expect arguments.  The @samp{#undef}
1292directive has no effect when used on a name not currently defined as a macro.
1293
1294@node Redefining, Macro Pitfalls, Undefining, Macros
1295@subsection Redefining Macros
1296
1297@cindex redefining macros
1298@dfn{Redefining} a macro means defining (with @samp{#define}) a name that
1299is already defined as a macro.
1300
1301A redefinition is trivial if the new definition is transparently identical
1302to the old one.  You probably wouldn't deliberately write a trivial
1303redefinition, but they can happen automatically when a header file is
1304included more than once (@pxref{Header Files}), so they are accepted
1305silently and without effect.
1306
1307Nontrivial redefinition is considered likely to be an error, so
1308it provokes a warning message from the preprocessor.  However, sometimes it
1309is useful to change the definition of a macro in mid-compilation.  You can
1310inhibit the warning by undefining the macro with @samp{#undef} before the
1311second definition.
1312
1313In order for a redefinition to be trivial, the new definition must
1314exactly match the one already in effect, with two possible exceptions:
1315
1316@itemize @bullet
1317@item
1318Whitespace may be added or deleted at the beginning or the end.
1319
1320@item
1321Whitespace may be changed in the middle (but not inside strings).
1322However, it may not be eliminated entirely, and it may not be added
1323where there was no whitespace at all.
1324@end itemize
1325
1326Recall that a comment counts as whitespace.
1327
1328@node Macro Pitfalls,, Redefining, Macros
1329@subsection Pitfalls and Subtleties of Macros
1330@cindex problems with macros
1331@cindex pitfalls of macros
1332
1333In this section we describe some special rules that apply to macros and
1334macro expansion, and point out certain cases in which the rules have
1335counterintuitive consequences that you must watch out for.
1336
1337@menu
1338* Misnesting::        Macros can contain unmatched parentheses.
1339* Macro Parentheses:: Why apparently superfluous parentheses
1340                         may be necessary to avoid incorrect grouping.
1341* Swallow Semicolon:: Macros that look like functions
1342                         but expand into compound statements.
1343* Side Effects::      Unsafe macros that cause trouble when
1344                         arguments contain side effects.
1345* Self-Reference::    Macros whose definitions use the macros' own names.
1346* Argument Prescan::  Actual arguments are checked for macro calls
1347                         before they are substituted.
1348* Cascaded Macros::   Macros whose definitions use other macros.
1349* Newlines in Args::  Sometimes line numbers get confused.
1350@end menu
1351
1352@node Misnesting, Macro Parentheses, Macro Pitfalls, Macro Pitfalls
1353@subsubsection Improperly Nested Constructs
1354
1355Recall that when a macro is called with arguments, the arguments are
1356substituted into the macro body and the result is checked, together with
1357the rest of the input file, for more macro calls.
1358
1359It is possible to piece together a macro call coming partially from the
1360macro body and partially from the actual arguments.  For example,
1361
1362@example
1363#define double(x) (2*(x))
1364#define call_with_1(x) x(1)
1365@end example
1366
1367@noindent
1368would expand @samp{call_with_1 (double)} into @samp{(2*(1))}.
1369
1370Macro definitions do not have to have balanced parentheses.  By writing an
1371unbalanced open parenthesis in a macro body, it is possible to create a
1372macro call that begins inside the macro body but ends outside of it.  For
1373example,
1374
1375@example
1376#define strange(file) fprintf (file, "%s %d",
1377@dots{}
1378strange(stderr) p, 35)
1379@end example
1380
1381@noindent
1382This bizarre example expands to @samp{fprintf (stderr, "%s %d", p, 35)}!
1383
1384@node Macro Parentheses, Swallow Semicolon, Misnesting, Macro Pitfalls
1385@subsubsection Unintended Grouping of Arithmetic
1386@cindex parentheses in macro bodies
1387
1388You may have noticed that in most of the macro definition examples shown
1389above, each occurrence of a macro argument name had parentheses around it.
1390In addition, another pair of parentheses usually surround the entire macro
1391definition.  Here is why it is best to write macros that way.
1392
1393Suppose you define a macro as follows,
1394
1395@example
1396#define ceil_div(x, y) (x + y - 1) / y
1397@end example
1398
1399@noindent
1400whose purpose is to divide, rounding up.  (One use for this operation is
1401to compute how many @samp{int} objects are needed to hold a certain
1402number of @samp{char} objects.)  Then suppose it is used as follows:
1403
1404@example
1405a = ceil_div (b & c, sizeof (int));
1406@end example
1407
1408@noindent
1409This expands into
1410
1411@example
1412a = (b & c + sizeof (int) - 1) / sizeof (int);
1413@end example
1414
1415@noindent
1416which does not do what is intended.  The operator-precedence rules of
1417C make it equivalent to this:
1418
1419@example
1420a = (b & (c + sizeof (int) - 1)) / sizeof (int);
1421@end example
1422
1423@noindent
1424But what we want is this:
1425
1426@example
1427a = ((b & c) + sizeof (int) - 1)) / sizeof (int);
1428@end example
1429
1430@noindent
1431Defining the macro as
1432
1433@example
1434#define ceil_div(x, y) ((x) + (y) - 1) / (y)
1435@end example
1436
1437@noindent
1438provides the desired result.
1439
1440However, unintended grouping can result in another way.  Consider
1441@samp{sizeof ceil_div(1, 2)}.  That has the appearance of a C expression
1442that would compute the size of the type of @samp{ceil_div (1, 2)}, but in
1443fact it means something very different.  Here is what it expands to:
1444
1445@example
1446sizeof ((1) + (2) - 1) / (2)
1447@end example
1448
1449@noindent
1450This would take the size of an integer and divide it by two.  The precedence
1451rules have put the division outside the @samp{sizeof} when it was intended
1452to be inside.
1453
1454Parentheses around the entire macro definition can prevent such problems.
1455Here, then, is the recommended way to define @samp{ceil_div}:
1456
1457@example
1458#define ceil_div(x, y) (((x) + (y) - 1) / (y))
1459@end example
1460
1461@node Swallow Semicolon, Side Effects, Macro Parentheses, Macro Pitfalls
1462@subsubsection Swallowing the Semicolon
1463
1464@cindex semicolons (after macro calls)
1465Often it is desirable to define a macro that expands into a compound
1466statement.  Consider, for example, the following macro, that advances a
1467pointer (the argument @samp{p} says where to find it) across whitespace
1468characters:
1469
1470@example
1471#define SKIP_SPACES (p, limit)  \
1472@{ register char *lim = (limit); \
1473  while (p != lim) @{            \
1474    if (*p++ != ' ') @{          \
1475      p--; break; @}@}@}
1476@end example
1477
1478@noindent
1479Here Backslash-Newline is used to split the macro definition, which must
1480be a single line, so that it resembles the way such C code would be
1481laid out if not part of a macro definition.
1482
1483A call to this macro might be @samp{SKIP_SPACES (p, lim)}.  Strictly
1484speaking, the call expands to a compound statement, which is a complete
1485statement with no need for a semicolon to end it.  But it looks like a
1486function call.  So it minimizes confusion if you can use it like a function
1487call, writing a semicolon afterward, as in @samp{SKIP_SPACES (p, lim);}
1488
1489But this can cause trouble before @samp{else} statements, because the
1490semicolon is actually a null statement.  Suppose you write
1491
1492@example
1493if (*p != 0)
1494  SKIP_SPACES (p, lim);
1495else @dots{}
1496@end example
1497
1498@noindent
1499The presence of two statements---the compound statement and a null
1500statement---in between the @samp{if} condition and the @samp{else}
1501makes invalid C code.
1502
1503The definition of the macro @samp{SKIP_SPACES} can be altered to solve
1504this problem, using a @samp{do @dots{} while} statement.  Here is how:
1505
1506@example
1507#define SKIP_SPACES (p, limit)     \
1508do @{ register char *lim = (limit); \
1509     while (p != lim) @{            \
1510       if (*p++ != ' ') @{          \
1511         p--; break; @}@}@}           \
1512while (0)
1513@end example
1514
1515Now @samp{SKIP_SPACES (p, lim);} expands into
1516
1517@example
1518do @{@dots{}@} while (0);
1519@end example
1520
1521@noindent
1522which is one statement.
1523
1524@node Side Effects, Self-Reference, Swallow Semicolon, Macro Pitfalls
1525@subsubsection Duplication of Side Effects
1526
1527@cindex side effects (in macro arguments)
1528@cindex unsafe macros
1529Many C programs define a macro @samp{min}, for ``minimum'', like this:
1530
1531@example
1532#define min(X, Y)  ((X) < (Y) ? (X) : (Y))
1533@end example
1534
1535When you use this macro with an argument containing a side effect,
1536as shown here,
1537
1538@example
1539next = min (x + y, foo (z));
1540@end example
1541
1542@noindent
1543it expands as follows:
1544
1545@example
1546next = ((x + y) < (foo (z)) ? (x + y) : (foo (z)));
1547@end example
1548
1549@noindent
1550where @samp{x + y} has been substituted for @samp{X} and @samp{foo (z)}
1551for @samp{Y}.
1552
1553The function @samp{foo} is used only once in the statement as it appears
1554in the program, but the expression @samp{foo (z)} has been substituted
1555twice into the macro expansion.  As a result, @samp{foo} might be called
1556two times when the statement is executed.  If it has side effects or
1557if it takes a long time to compute, the results might not be what you
1558intended.  We say that @samp{min} is an @dfn{unsafe} macro.
1559
1560The best solution to this problem is to define @samp{min} in a way that
1561computes the value of @samp{foo (z)} only once.  The C language offers no
1562standard way to do this, but it can be done with GNU C extensions as
1563follows:
1564
1565@example
1566#define min(X, Y)                     \
1567(@{ typeof (X) __x = (X), __y = (Y);   \
1568   (__x < __y) ? __x : __y; @})
1569@end example
1570
1571If you do not wish to use GNU C extensions, the only solution is to be
1572careful when @emph{using} the macro @samp{min}.  For example, you can
1573calculate the value of @samp{foo (z)}, save it in a variable, and use that
1574variable in @samp{min}:
1575
1576@example
1577#define min(X, Y)  ((X) < (Y) ? (X) : (Y))
1578@dots{}
1579@{
1580  int tem = foo (z);
1581  next = min (x + y, tem);
1582@}
1583@end example
1584
1585@noindent
1586(where we assume that @samp{foo} returns type @samp{int}).
1587
1588@node Self-Reference, Argument Prescan, Side Effects, Macro Pitfalls
1589@subsubsection Self-Referential Macros
1590
1591@cindex self-reference
1592A @dfn{self-referential} macro is one whose name appears in its definition.
1593A special feature of ANSI Standard C is that the self-reference is not
1594considered a macro call.  It is passed into the preprocessor output
1595unchanged.
1596
1597Let's consider an example:
1598
1599@example
1600#define foo (4 + foo)
1601@end example
1602
1603@noindent
1604where @samp{foo} is also a variable in your program.
1605
1606Following the ordinary rules, each reference to @samp{foo} will expand into
1607@samp{(4 + foo)}; then this will be rescanned and will expand into @samp{(4
1608+ (4 + foo))}; and so on until it causes a fatal error (memory full) in the
1609preprocessor.
1610
1611However, the special rule about self-reference cuts this process short
1612after one step, at @samp{(4 + foo)}.  Therefore, this macro definition
1613has the possibly useful effect of causing the program to add 4 to
1614the value of @samp{foo} wherever @samp{foo} is referred to.
1615
1616In most cases, it is a bad idea to take advantage of this feature.  A
1617person reading the program who sees that @samp{foo} is a variable will
1618not expect that it is a macro as well.  The reader will come across the
1619identifier @samp{foo} in the program and think its value should be that
1620of the variable @samp{foo}, whereas in fact the value is four greater.
1621
1622The special rule for self-reference applies also to @dfn{indirect}
1623self-reference.  This is the case where a macro @var{x} expands to use a
1624macro @samp{y}, and the expansion of @samp{y} refers to the macro
1625@samp{x}.  The resulting reference to @samp{x} comes indirectly from the
1626expansion of @samp{x}, so it is a self-reference and is not further
1627expanded.  Thus, after
1628
1629@example
1630#define x (4 + y)
1631#define y (2 * x)
1632@end example
1633
1634@noindent
1635@samp{x} would expand into @samp{(4 + (2 * x))}.  Clear?
1636
1637But suppose @samp{y} is used elsewhere, not from the definition of @samp{x}.
1638Then the use of @samp{x} in the expansion of @samp{y} is not a self-reference
1639because @samp{x} is not ``in progress''.  So it does expand.  However,
1640the expansion of @samp{x} contains a reference to @samp{y}, and that
1641is an indirect self-reference now because @samp{y} is ``in progress''.
1642The result is that @samp{y} expands to @samp{(2 * (4 + y))}.
1643
1644It is not clear that this behavior would ever be useful, but it is specified
1645by the ANSI C standard, so you may need to understand it.
1646
1647@node Argument Prescan, Cascaded Macros, Self-Reference, Macro Pitfalls
1648@subsubsection Separate Expansion of Macro Arguments
1649@cindex expansion of arguments
1650@cindex macro argument expansion
1651@cindex prescan of macro arguments
1652
1653We have explained that the expansion of a macro, including the substituted
1654actual arguments, is scanned over again for macro calls to be expanded.
1655
1656What really happens is more subtle: first each actual argument text is scanned
1657separately for macro calls.  Then the results of this are substituted into
1658the macro body to produce the macro expansion, and the macro expansion
1659is scanned again for macros to expand.
1660
1661The result is that the actual arguments are scanned @emph{twice} to expand
1662macro calls in them.
1663
1664Most of the time, this has no effect.  If the actual argument contained
1665any macro calls, they are expanded during the first scan.  The result
1666therefore contains no macro calls, so the second scan does not change it.
1667If the actual argument were substituted as given, with no prescan,
1668the single remaining scan would find the same macro calls and produce
1669the same results.
1670
1671You might expect the double scan to change the results when a
1672self-referential macro is used in an actual argument of another macro
1673(@pxref{Self-Reference}): the self-referential macro would be expanded once
1674in the first scan, and a second time in the second scan.  But this is not
1675what happens.  The self-references that do not expand in the first scan are
1676marked so that they will not expand in the second scan either.
1677
1678The prescan is not done when an argument is stringified or concatenated.
1679Thus,
1680
1681@example
1682#define str(s) #s
1683#define foo 4
1684str (foo)
1685@end example
1686
1687@noindent
1688expands to @samp{"foo"}.  Once more, prescan has been prevented from
1689having any noticeable effect.
1690
1691More precisely, stringification and concatenation use the argument as
1692written, in un-prescanned form.  The same actual argument would be used in
1693prescanned form if it is substituted elsewhere without stringification or
1694concatenation.
1695
1696@example
1697#define str(s) #s lose(s)
1698#define foo 4
1699str (foo)
1700@end example
1701
1702expands to @samp{"foo" lose(4)}.
1703
1704You might now ask, ``Why mention the prescan, if it makes no difference?
1705And why not skip it and make the preprocessor faster?''  The answer is
1706that the prescan does make a difference in three special cases:
1707
1708@itemize @bullet
1709@item
1710Nested calls to a macro.
1711
1712@item
1713Macros that call other macros that stringify or concatenate.
1714
1715@item
1716Macros whose expansions contain unshielded commas.
1717@end itemize
1718
1719We say that @dfn{nested} calls to a macro occur when a macro's actual
1720argument contains a call to that very macro.  For example, if @samp{f}
1721is a macro that expects one argument, @samp{f (f (1))} is a nested
1722pair of calls to @samp{f}.  The desired expansion is made by
1723expanding @samp{f (1)} and substituting that into the definition of
1724@samp{f}.  The prescan causes the expected result to happen.
1725Without the prescan, @samp{f (1)} itself would be substituted as
1726an actual argument, and the inner use of @samp{f} would appear
1727during the main scan as an indirect self-reference and would not
1728be expanded.  Here, the prescan cancels an undesirable side effect
1729(in the medical, not computational, sense of the term) of the special
1730rule for self-referential macros.
1731
1732But prescan causes trouble in certain other cases of nested macro calls.
1733Here is an example:
1734
1735@example
1736#define foo  a,b
1737#define bar(x) lose(x)
1738#define lose(x) (1 + (x))
1739
1740bar(foo)
1741@end example
1742
1743@noindent
1744We would like @samp{bar(foo)} to turn into @samp{(1 + (foo))}, which
1745would then turn into @samp{(1 + (a,b))}.  But instead, @samp{bar(foo)}
1746expands into @samp{lose(a,b)}, and you get an error because @code{lose}
1747requires a single argument.  In this case, the problem is easily solved
1748by the same parentheses that ought to be used to prevent misnesting of
1749arithmetic operations:
1750
1751@example
1752#define foo (a,b)
1753#define bar(x) lose((x))
1754@end example
1755
1756The problem is more serious when the operands of the macro are not
1757expressions; for example, when they are statements.  Then parentheses
1758are unacceptable because they would make for invalid C code:
1759
1760@example
1761#define foo @{ int a, b; @dots{} @}
1762@end example
1763
1764@noindent
1765In GNU C you can shield the commas using the @samp{(@{@dots{}@})}
1766construct which turns a compound statement into an expression:
1767
1768@example
1769#define foo (@{ int a, b; @dots{} @})
1770@end example
1771
1772Or you can rewrite the macro definition to avoid such commas:
1773
1774@example
1775#define foo @{ int a; int b; @dots{} @}
1776@end example
1777
1778There is also one case where prescan is useful.  It is possible
1779to use prescan to expand an argument and then stringify it---if you use
1780two levels of macros.  Let's add a new macro @samp{xstr} to the
1781example shown above:
1782
1783@example
1784#define xstr(s) str(s)
1785#define str(s) #s
1786#define foo 4
1787xstr (foo)
1788@end example
1789
1790This expands into @samp{"4"}, not @samp{"foo"}.  The reason for the
1791difference is that the argument of @samp{xstr} is expanded at prescan
1792(because @samp{xstr} does not specify stringification or concatenation of
1793the argument).  The result of prescan then forms the actual argument for
1794@samp{str}.  @samp{str} uses its argument without prescan because it
1795performs stringification; but it cannot prevent or undo the prescanning
1796already done by @samp{xstr}.
1797
1798@node Cascaded Macros, Newlines in Args, Argument Prescan, Macro Pitfalls
1799@subsubsection Cascaded Use of Macros
1800
1801@cindex cascaded macros
1802@cindex macro body uses macro
1803A @dfn{cascade} of macros is when one macro's body contains a reference
1804to another macro.  This is very common practice.  For example,
1805
1806@example
1807#define BUFSIZE 1020
1808#define TABLESIZE BUFSIZE
1809@end example
1810
1811This is not at all the same as defining @samp{TABLESIZE} to be @samp{1020}.
1812The @samp{#define} for @samp{TABLESIZE} uses exactly the body you
1813specify---in this case, @samp{BUFSIZE}---and does not check to see whether
1814it too is the name of a macro.
1815
1816It's only when you @emph{use} @samp{TABLESIZE} that the result of its expansion
1817is checked for more macro names.
1818
1819This makes a difference if you change the definition of @samp{BUFSIZE}
1820at some point in the source file.  @samp{TABLESIZE}, defined as shown,
1821will always expand using the definition of @samp{BUFSIZE} that is
1822currently in effect:
1823
1824@example
1825#define BUFSIZE 1020
1826#define TABLESIZE BUFSIZE
1827#undef BUFSIZE
1828#define BUFSIZE 37
1829@end example
1830
1831@noindent
1832Now @samp{TABLESIZE} expands (in two stages) to @samp{37}.  (The
1833@samp{#undef} is to prevent any warning about the nontrivial
1834redefinition of @code{BUFSIZE}.)
1835
1836@node Newlines in Args,, Cascaded Macros, Macro Pitfalls
1837@subsection Newlines in Macro Arguments
1838@cindex newlines in macro arguments
1839
1840Traditional macro processing carries forward all newlines in macro
1841arguments into the expansion of the macro.  This means that, if some of
1842the arguments are substituted more than once, or not at all, or out of
1843order, newlines can be duplicated, lost, or moved around within the
1844expansion.  If the expansion consists of multiple statements, then the
1845effect is to distort the line numbers of some of these statements.  The
1846result can be incorrect line numbers, in error messages or displayed in
1847a debugger.
1848
1849The GNU C preprocessor operating in ANSI C mode adjusts appropriately
1850for multiple use of an argument---the first use expands all the
1851newlines, and subsequent uses of the same argument produce no newlines.
1852But even in this mode, it can produce incorrect line numbering if
1853arguments are used out of order, or not used at all.
1854
1855Here is an example illustrating this problem:
1856
1857@example
1858#define ignore_second_arg(a,b,c) a; c
1859
1860ignore_second_arg (foo (),
1861                   ignored (),
1862                   syntax error);
1863@end example
1864
1865@noindent
1866The syntax error triggered by the tokens @samp{syntax error} results
1867in an error message citing line four, even though the statement text
1868comes from line five.
1869
1870@node Conditionals, Combining Sources, Macros, Top
1871@section Conditionals
1872
1873@cindex conditionals
1874In a macro processor, a @dfn{conditional} is a directive that allows a part
1875of the program to be ignored during compilation, on some conditions.
1876In the C preprocessor, a conditional can test either an arithmetic expression
1877or whether a name is defined as a macro.
1878
1879A conditional in the C preprocessor resembles in some ways an @samp{if}
1880statement in C, but it is important to understand the difference between
1881them.  The condition in an @samp{if} statement is tested during the execution
1882of your program.  Its purpose is to allow your program to behave differently
1883from run to run, depending on the data it is operating on.  The condition
1884in a preprocessing conditional directive is tested when your program is compiled.
1885Its purpose is to allow different code to be included in the program depending
1886on the situation at the time of compilation.
1887
1888@menu
1889* Uses: Conditional Uses.       What conditionals are for.
1890* Syntax: Conditional Syntax.   How conditionals are written.
1891* Deletion: Deleted Code.       Making code into a comment.
1892* Macros: Conditionals-Macros.  Why conditionals are used with macros.
1893* Assertions::                  How and why to use assertions.
1894* Errors: #error Directive.     Detecting inconsistent compilation parameters.
1895@end menu
1896
1897@node Conditional Uses
1898@subsection Why Conditionals are Used
1899
1900Generally there are three kinds of reason to use a conditional.
1901
1902@itemize @bullet
1903@item
1904A program may need to use different code depending on the machine or
1905operating system it is to run on.  In some cases the code for one
1906operating system may be erroneous on another operating system; for
1907example, it might refer to library routines that do not exist on the
1908other system.  When this happens, it is not enough to avoid executing
1909the invalid code: merely having it in the program makes it impossible
1910to link the program and run it.  With a preprocessing conditional, the
1911offending code can be effectively excised from the program when it is
1912not valid.
1913
1914@item
1915You may want to be able to compile the same source file into two
1916different programs.  Sometimes the difference between the programs is
1917that one makes frequent time-consuming consistency checks on its
1918intermediate data, or prints the values of those data for debugging,
1919while the other does not.
1920
1921@item
1922A conditional whose condition is always false is a good way to exclude
1923code from the program but keep it as a sort of comment for future
1924reference.
1925@end itemize
1926
1927Most simple programs that are intended to run on only one machine will
1928not need to use preprocessing conditionals.
1929
1930@node Conditional Syntax
1931@subsection Syntax of Conditionals
1932
1933@findex #if
1934A conditional in the C preprocessor begins with a @dfn{conditional
1935directive}: @samp{#if}, @samp{#ifdef} or @samp{#ifndef}.
1936@xref{Conditionals-Macros}, for information on @samp{#ifdef} and
1937@samp{#ifndef}; only @samp{#if} is explained here.
1938
1939@menu
1940* If: #if Directive.     Basic conditionals using @samp{#if} and @samp{#endif}.
1941* Else: #else Directive. Including some text if the condition fails.
1942* Elif: #elif Directive. Testing several alternative possibilities.
1943@end menu
1944
1945@node #if Directive
1946@subsubsection The @samp{#if} Directive
1947
1948The @samp{#if} directive in its simplest form consists of
1949
1950@example
1951#if @var{expression}
1952@var{controlled text}
1953#endif /* @var{expression} */
1954@end example
1955
1956The comment following the @samp{#endif} is not required, but it is a good
1957practice because it helps people match the @samp{#endif} to the
1958corresponding @samp{#if}.  Such comments should always be used, except in
1959short conditionals that are not nested.  In fact, you can put anything at
1960all after the @samp{#endif} and it will be ignored by the GNU C preprocessor,
1961but only comments are acceptable in ANSI Standard C.
1962
1963@var{expression} is a C expression of integer type, subject to stringent
1964restrictions.  It may contain
1965
1966@itemize @bullet
1967@item
1968Integer constants, which are all regarded as @code{long} or
1969@code{unsigned long}.
1970
1971@item
1972Character constants, which are interpreted according to the character
1973set and conventions of the machine and operating system on which the
1974preprocessor is running.  The GNU C preprocessor uses the C data type
1975@samp{char} for these character constants; therefore, whether some
1976character codes are negative is determined by the C compiler used to
1977compile the preprocessor.  If it treats @samp{char} as signed, then
1978character codes large enough to set the sign bit will be considered
1979negative; otherwise, no character code is considered negative.
1980
1981@item
1982Arithmetic operators for addition, subtraction, multiplication,
1983division, bitwise operations, shifts, comparisons, and logical
1984operations (@samp{&&} and @samp{||}).
1985
1986@item
1987Identifiers that are not macros, which are all treated as zero(!).
1988
1989@item
1990Macro calls.  All macro calls in the expression are expanded before
1991actual computation of the expression's value begins.
1992@end itemize
1993
1994Note that @samp{sizeof} operators and @code{enum}-type values are not allowed.
1995@code{enum}-type values, like all other identifiers that are not taken
1996as macro calls and expanded, are treated as zero.
1997
1998The @var{controlled text} inside of a conditional can include
1999preprocessing directives.  Then the directives inside the conditional are
2000obeyed only if that branch of the conditional succeeds.  The text can
2001also contain other conditional groups.  However, the @samp{#if} and
2002@samp{#endif} directives must balance.
2003
2004@node #else Directive
2005@subsubsection The @samp{#else} Directive
2006
2007@findex #else
2008The @samp{#else} directive can be added to a conditional to provide
2009alternative text to be used if the condition is false.  This is what
2010it looks like:
2011
2012@example
2013#if @var{expression}
2014@var{text-if-true}
2015#else /* Not @var{expression} */
2016@var{text-if-false}
2017#endif /* Not @var{expression} */
2018@end example
2019
2020If @var{expression} is nonzero, and thus the @var{text-if-true} is
2021active, then @samp{#else} acts like a failing conditional and the
2022@var{text-if-false} is ignored.  Contrariwise, if the @samp{#if}
2023conditional fails, the @var{text-if-false} is considered included.
2024
2025@node #elif Directive
2026@subsubsection The @samp{#elif} Directive
2027
2028@findex #elif
2029One common case of nested conditionals is used to check for more than two
2030possible alternatives.  For example, you might have
2031
2032@example
2033#if X == 1
2034@dots{}
2035#else /* X != 1 */
2036#if X == 2
2037@dots{}
2038#else /* X != 2 */
2039@dots{}
2040#endif /* X != 2 */
2041#endif /* X != 1 */
2042@end example
2043
2044Another conditional directive, @samp{#elif}, allows this to be abbreviated
2045as follows:
2046
2047@example
2048#if X == 1
2049@dots{}
2050#elif X == 2
2051@dots{}
2052#else /* X != 2 and X != 1*/
2053@dots{}
2054#endif /* X != 2 and X != 1*/
2055@end example
2056
2057@samp{#elif} stands for ``else if''.  Like @samp{#else}, it goes in the
2058middle of a @samp{#if}-@samp{#endif} pair and subdivides it; it does not
2059require a matching @samp{#endif} of its own.  Like @samp{#if}, the
2060@samp{#elif} directive includes an expression to be tested.
2061
2062The text following the @samp{#elif} is processed only if the original
2063@samp{#if}-condition failed and the @samp{#elif} condition succeeds.
2064More than one @samp{#elif} can go in the same @samp{#if}-@samp{#endif}
2065group.  Then the text after each @samp{#elif} is processed only if the
2066@samp{#elif} condition succeeds after the original @samp{#if} and any
2067previous @samp{#elif} directives within it have failed.  @samp{#else} is
2068equivalent to @samp{#elif 1}, and @samp{#else} is allowed after any
2069number of @samp{#elif} directives, but @samp{#elif} may not follow
2070@samp{#else}.
2071
2072@node Deleted Code
2073@subsection Keeping Deleted Code for Future Reference
2074@cindex commenting out code
2075
2076If you replace or delete a part of the program but want to keep the old
2077code around as a comment for future reference, the easy way to do this
2078is to put @samp{#if 0} before it and @samp{#endif} after it.  This is
2079better than using comment delimiters @samp{/*} and @samp{*/} since those
2080won't work if the code already contains comments (C comments do not
2081nest).
2082
2083This works even if the code being turned off contains conditionals, but
2084they must be entire conditionals (balanced @samp{#if} and @samp{#endif}).
2085
2086Conversely, do not use @samp{#if 0} for comments which are not C code.
2087Use the comment delimiters @samp{/*} and @samp{*/} instead.  The
2088interior of @samp{#if 0} must consist of complete tokens; in particular,
2089singlequote characters must balance.  But comments often contain
2090unbalanced singlequote characters (known in English as apostrophes).
2091These confuse @samp{#if 0}.  They do not confuse @samp{/*}.
2092
2093@node Conditionals-Macros
2094@subsection Conditionals and Macros
2095
2096Conditionals are useful in connection with macros or assertions, because
2097those are the only ways that an expression's value can vary from one
2098compilation to another.  A @samp{#if} directive whose expression uses no
2099macros or assertions is equivalent to @samp{#if 1} or @samp{#if 0}; you
2100might as well determine which one, by computing the value of the
2101expression yourself, and then simplify the program.
2102
2103For example, here is a conditional that tests the expression
2104@samp{BUFSIZE == 1020}, where @samp{BUFSIZE} must be a macro.
2105
2106@example
2107#if BUFSIZE == 1020
2108  printf ("Large buffers!\n");
2109#endif /* BUFSIZE is large */
2110@end example
2111
2112(Programmers often wish they could test the size of a variable or data
2113type in @samp{#if}, but this does not work.  The preprocessor does not
2114understand @code{sizeof}, or typedef names, or even the type keywords
2115such as @code{int}.)
2116
2117@findex defined
2118The special operator @samp{defined} is used in @samp{#if} expressions to
2119test whether a certain name is defined as a macro.  Either @samp{defined
2120@var{name}} or @samp{defined (@var{name})} is an expression whose value
2121is 1 if @var{name} is defined as macro at the current point in the
2122program, and 0 otherwise.  For the @samp{defined} operator it makes no
2123difference what the definition of the macro is; all that matters is
2124whether there is a definition.  Thus, for example,@refill
2125
2126@example
2127#if defined (vax) || defined (ns16000)
2128@end example
2129
2130@noindent
2131would succeed if either of the names @samp{vax} and @samp{ns16000} is
2132defined as a macro.  You can test the same condition using assertions
2133(@pxref{Assertions}), like this:
2134
2135@example
2136#if #cpu (vax) || #cpu (ns16000)
2137@end example
2138
2139If a macro is defined and later undefined with @samp{#undef},
2140subsequent use of the @samp{defined} operator returns 0, because
2141the name is no longer defined.  If the macro is defined again with
2142another @samp{#define}, @samp{defined} will recommence returning 1.
2143
2144@findex #ifdef
2145@findex #ifndef
2146Conditionals that test whether just one name is defined are very common,
2147so there are two special short conditional directives for this case.
2148
2149@table @code
2150@item #ifdef @var{name}
2151is equivalent to @samp{#if defined (@var{name})}.
2152
2153@item #ifndef @var{name}
2154is equivalent to @samp{#if ! defined (@var{name})}.
2155@end table
2156
2157Macro definitions can vary between compilations for several reasons.
2158
2159@itemize @bullet
2160@item
2161Some macros are predefined on each kind of machine.  For example, on a
2162Vax, the name @samp{vax} is a predefined macro.  On other machines, it
2163would not be defined.
2164
2165@item
2166Many more macros are defined by system header files.  Different
2167systems and machines define different macros, or give them different
2168values.  It is useful to test these macros with conditionals to avoid
2169using a system feature on a machine where it is not implemented.
2170
2171@item
2172Macros are a common way of allowing users to customize a program for
2173different machines or applications.  For example, the macro
2174@samp{BUFSIZE} might be defined in a configuration file for your
2175program that is included as a header file in each source file.  You
2176would use @samp{BUFSIZE} in a preprocessing conditional in order to
2177generate different code depending on the chosen configuration.
2178
2179@item
2180Macros can be defined or undefined with @samp{-D} and @samp{-U}
2181command options when you compile the program.  You can arrange to
2182compile the same source file into two different programs by choosing
2183a macro name to specify which program you want, writing conditionals
2184to test whether or how this macro is defined, and then controlling
2185the state of the macro with compiler command options.
2186@xref{Invocation}.
2187@end itemize
2188
2189@ifinfo
2190Assertions are usually predefined, but can be defined with preprocessor
2191directives or command-line options.
2192@end ifinfo
2193
2194@node Assertions
2195@subsection Assertions
2196
2197@cindex assertions
2198@dfn{Assertions} are a more systematic alternative to macros in writing
2199conditionals to test what sort of computer or system the compiled
2200program will run on.  Assertions are usually predefined, but you can
2201define them with preprocessing directives or command-line options.
2202
2203@cindex predicates
2204The macros traditionally used to describe the type of target are not
2205classified in any way according to which question they answer; they may
2206indicate a hardware architecture, a particular hardware model, an
2207operating system, a particular version of an operating system, or
2208specific configuration options.  These are jumbled together in a single
2209namespace.  In contrast, each assertion consists of a named question and
2210an answer.  The question is usually called the @dfn{predicate}.
2211An assertion looks like this:
2212
2213@example
2214#@var{predicate} (@var{answer})
2215@end example
2216
2217@noindent
2218You must use a properly formed identifier for @var{predicate}.  The
2219value of @var{answer} can be any sequence of words; all characters are
2220significant except for leading and trailing whitespace, and differences
2221in internal whitespace sequences are ignored.  Thus, @samp{x + y} is
2222different from @samp{x+y} but equivalent to @samp{x + y}.  @samp{)} is
2223not allowed in an answer.
2224
2225@cindex testing predicates
2226Here is a conditional to test whether the answer @var{answer} is asserted
2227for the predicate @var{predicate}:
2228
2229@example
2230#if #@var{predicate} (@var{answer})
2231@end example
2232
2233@noindent
2234There may be more than one answer asserted for a given predicate.  If
2235you omit the answer, you can test whether @emph{any} answer is asserted
2236for @var{predicate}:
2237
2238@example
2239#if #@var{predicate}
2240@end example
2241
2242@findex #system
2243@findex #machine
2244@findex #cpu
2245Most of the time, the assertions you test will be predefined assertions.
2246GNU C provides three predefined predicates: @code{system}, @code{cpu},
2247and @code{machine}.  @code{system} is for assertions about the type of
2248software, @code{cpu} describes the type of computer architecture, and
2249@code{machine} gives more information about the computer.  For example,
2250on a GNU system, the following assertions would be true:
2251
2252@example
2253#system (gnu)
2254#system (mach)
2255#system (mach 3)
2256#system (mach 3.@var{subversion})
2257#system (hurd)
2258#system (hurd @var{version})
2259@end example
2260
2261@noindent
2262and perhaps others.  The alternatives with
2263more or less version information let you ask more or less detailed
2264questions about the type of system software.
2265
2266On a Unix system, you would find @code{#system (unix)} and perhaps one of:
2267@code{#system (aix)}, @code{#system (bsd)}, @code{#system (hpux)},
2268@code{#system (lynx)}, @code{#system (mach)}, @code{#system (posix)},
2269@code{#system (svr3)}, @code{#system (svr4)}, or @code{#system (xpg4)}
2270with possible version numbers following.
2271
2272Other values for @code{system} are @code{#system (mvs)}
2273and @code{#system (vms)}.
2274
2275@strong{Portability note:} Many Unix C compilers provide only one answer
2276for the @code{system} assertion: @code{#system (unix)}, if they support
2277assertions at all.  This is less than useful.
2278
2279An assertion with a multi-word answer is completely different from several
2280assertions with individual single-word answers.  For example, the presence
2281of @code{system (mach 3.0)} does not mean that @code{system (3.0)} is true.
2282It also does not directly imply @code{system (mach)}, but in GNU C, that
2283last will normally be asserted as well.
2284
2285The current list of possible assertion values for @code{cpu} is:
2286@code{#cpu (a29k)}, @code{#cpu (alpha)}, @code{#cpu (arm)}, @code{#cpu
2287(clipper)}, @code{#cpu (convex)}, @code{#cpu (elxsi)}, @code{#cpu
2288(tron)}, @code{#cpu (h8300)}, @code{#cpu (i370)}, @code{#cpu (i386)},
2289@code{#cpu (i860)}, @code{#cpu (i960)}, @code{#cpu (m68k)}, @code{#cpu
2290(m88k)}, @code{#cpu (mips)}, @code{#cpu (ns32k)}, @code{#cpu (hppa)},
2291@code{#cpu (pyr)}, @code{#cpu (ibm032)}, @code{#cpu (rs6000)},
2292@code{#cpu (sh)}, @code{#cpu (sparc)}, @code{#cpu (spur)}, @code{#cpu
2293(tahoe)}, @code{#cpu (vax)}, @code{#cpu (we32000)}.
2294
2295@findex #assert
2296You can create assertions within a C program using @samp{#assert}, like
2297this:
2298
2299@example
2300#assert @var{predicate} (@var{answer})
2301@end example
2302
2303@noindent
2304(Note the absence of a @samp{#} before @var{predicate}.)
2305
2306@cindex unassert
2307@cindex assertions, undoing
2308@cindex retracting assertions
2309@findex #unassert
2310Each time you do this, you assert a new true answer for @var{predicate}.
2311Asserting one answer does not invalidate previously asserted answers;
2312they all remain true.  The only way to remove an assertion is with
2313@samp{#unassert}.  @samp{#unassert} has the same syntax as
2314@samp{#assert}.  You can also remove all assertions about
2315@var{predicate} like this:
2316
2317@example
2318#unassert @var{predicate}
2319@end example
2320
2321You can also add or cancel assertions using command options
2322when you run @code{gcc} or @code{cpp}.  @xref{Invocation}.
2323
2324@node #error Directive
2325@subsection The @samp{#error} and @samp{#warning} Directives
2326
2327@findex #error
2328The directive @samp{#error} causes the preprocessor to report a fatal
2329error.  The rest of the line that follows @samp{#error} is used as the
2330error message.
2331
2332You would use @samp{#error} inside of a conditional that detects a
2333combination of parameters which you know the program does not properly
2334support.  For example, if you know that the program will not run
2335properly on a Vax, you might write
2336
2337@smallexample
2338@group
2339#ifdef __vax__
2340#error Won't work on Vaxen.  See comments at get_last_object.
2341#endif
2342@end group
2343@end smallexample
2344
2345@noindent
2346@xref{Nonstandard Predefined}, for why this works.
2347
2348If you have several configuration parameters that must be set up by
2349the installation in a consistent way, you can use conditionals to detect
2350an inconsistency and report it with @samp{#error}.  For example,
2351
2352@smallexample
2353#if HASH_TABLE_SIZE % 2 == 0 || HASH_TABLE_SIZE % 3 == 0 \
2354    || HASH_TABLE_SIZE % 5 == 0
2355#error HASH_TABLE_SIZE should not be divisible by a small prime
2356#endif
2357@end smallexample
2358
2359@findex #warning
2360The directive @samp{#warning} is like the directive @samp{#error}, but causes
2361the preprocessor to issue a warning and continue preprocessing.  The rest of
2362the line that follows @samp{#warning} is used as the warning message.
2363
2364You might use @samp{#warning} in obsolete header files, with a message
2365directing the user to the header file which should be used instead.
2366
2367@node Combining Sources, Other Directives, Conditionals, Top
2368@section Combining Source Files
2369
2370@cindex line control
2371One of the jobs of the C preprocessor is to inform the C compiler of where
2372each line of C code came from: which source file and which line number.
2373
2374C code can come from multiple source files if you use @samp{#include};
2375both @samp{#include} and the use of conditionals and macros can cause
2376the line number of a line in the preprocessor output to be different
2377from the line's number in the original source file.  You will appreciate
2378the value of making both the C compiler (in error messages) and symbolic
2379debuggers such as GDB use the line numbers in your source file.
2380
2381The C preprocessor builds on this feature by offering a directive by which
2382you can control the feature explicitly.  This is useful when a file for
2383input to the C preprocessor is the output from another program such as the
2384@code{bison} parser generator, which operates on another file that is the
2385true source file.  Parts of the output from @code{bison} are generated from
2386scratch, other parts come from a standard parser file.  The rest are copied
2387nearly verbatim from the source file, but their line numbers in the
2388@code{bison} output are not the same as their original line numbers.
2389Naturally you would like compiler error messages and symbolic debuggers to
2390know the original source file and line number of each line in the
2391@code{bison} input.
2392
2393@findex #line
2394@code{bison} arranges this by writing @samp{#line} directives into the output
2395file.  @samp{#line} is a directive that specifies the original line number
2396and source file name for subsequent input in the current preprocessor input
2397file.  @samp{#line} has three variants:
2398
2399@table @code
2400@item #line @var{linenum}
2401Here @var{linenum} is a decimal integer constant.  This specifies that
2402the line number of the following line of input, in its original source file,
2403was @var{linenum}.
2404
2405@item #line @var{linenum} @var{filename}
2406Here @var{linenum} is a decimal integer constant and @var{filename}
2407is a string constant.  This specifies that the following line of input
2408came originally from source file @var{filename} and its line number there
2409was @var{linenum}.  Keep in mind that @var{filename} is not just a
2410file name; it is surrounded by doublequote characters so that it looks
2411like a string constant.
2412
2413@item #line @var{anything else}
2414@var{anything else} is checked for macro calls, which are expanded.
2415The result should be a decimal integer constant followed optionally
2416by a string constant, as described above.
2417@end table
2418
2419@samp{#line} directives alter the results of the @samp{__FILE__} and
2420@samp{__LINE__} predefined macros from that point on.  @xref{Standard
2421Predefined}.
2422
2423The output of the preprocessor (which is the input for the rest of the
2424compiler) contains directives that look much like @samp{#line} directives.
2425They start with just @samp{#} instead of @samp{#line}, but this is
2426followed by a line number and file name as in @samp{#line}.  @xref{Output}.
2427
2428@node Other Directives, Output, Combining Sources, Top
2429@section Miscellaneous Preprocessing Directives
2430
2431@cindex null directive
2432This section describes three additional preprocessing directives.  They are
2433not very useful, but are mentioned for completeness.
2434
2435The @dfn{null directive} consists of a @samp{#} followed by a Newline, with
2436only whitespace (including comments) in between.  A null directive is
2437understood as a preprocessing directive but has no effect on the preprocessor
2438output.  The primary significance of the existence of the null directive is
2439that an input line consisting of just a @samp{#} will produce no output,
2440rather than a line of output containing just a @samp{#}.  Supposedly
2441some old C programs contain such lines.
2442
2443@findex #pragma
2444The ANSI standard specifies that the @samp{#pragma} directive has an
2445arbitrary, implementation-defined effect.  In the GNU C preprocessor,
2446@samp{#pragma} directives are not used, except for @samp{#pragma once}
2447(@pxref{Once-Only}).  However, they are left in the preprocessor output,
2448so they are available to the compilation pass.
2449
2450@findex #ident
2451The @samp{#ident} directive is supported for compatibility with certain
2452other systems.  It is followed by a line of text.  On some systems, the
2453text is copied into a special place in the object file; on most systems,
2454the text is ignored and this directive has no effect.  Typically
2455@samp{#ident} is only used in header files supplied with those systems
2456where it is meaningful.
2457
2458@node Output, Invocation, Other Directives, Top
2459@section C Preprocessor Output
2460
2461@cindex output format
2462The output from the C preprocessor looks much like the input, except
2463that all preprocessing directive lines have been replaced with blank lines
2464and all comments with spaces.  Whitespace within a line is not altered;
2465however, a space is inserted after the expansions of most macro calls.
2466
2467Source file name and line number information is conveyed by lines of
2468the form
2469
2470@example
2471# @var{linenum} @var{filename} @var{flags}
2472@end example
2473
2474@noindent
2475which are inserted as needed into the middle of the input (but never
2476within a string or character constant).  Such a line means that the
2477following line originated in file @var{filename} at line @var{linenum}.
2478
2479After the file name comes zero or more flags, which are @samp{1},
2480@samp{2}, @samp{3}, or @samp{4}.  If there are multiple flags, spaces separate
2481them.  Here is what the flags mean:
2482
2483@table @samp
2484@item 1
2485This indicates the start of a new file.
2486@item 2
2487This indicates returning to a file (after having included another file).
2488@item 3
2489This indicates that the following text comes from a system header file,
2490so certain warnings should be suppressed.
2491@item 4
2492This indicates that the following text should be treated as C.
2493@c maybe cross reference NO_IMPLICIT_EXTERN_C
2494@end table
2495
2496@node Invocation, Concept Index, Output, Top
2497@section Invoking the C Preprocessor
2498@cindex invocation of the preprocessor
2499
2500Most often when you use the C preprocessor you will not have to invoke it
2501explicitly: the C compiler will do so automatically.  However, the
2502preprocessor is sometimes useful on its own.
2503
2504The C preprocessor expects two file names as arguments, @var{infile} and
2505@var{outfile}.  The preprocessor reads @var{infile} together with any other
2506files it specifies with @samp{#include}.  All the output generated by the
2507combined input files is written in @var{outfile}.
2508
2509Either @var{infile} or @var{outfile} may be @samp{-}, which as @var{infile}
2510means to read from standard input and as @var{outfile} means to write to
2511standard output.  Also, if @var{outfile} or both file names are omitted,
2512the standard output and standard input are used for the omitted file names.
2513
2514@cindex options
2515Here is a table of command options accepted by the C preprocessor.
2516These options can also be given when compiling a C program; they are
2517passed along automatically to the preprocessor when it is invoked by the
2518compiler.
2519
2520@table @samp
2521@item -P
2522@findex -P
2523Inhibit generation of @samp{#}-lines with line-number information in
2524the output from the preprocessor (@pxref{Output}).  This might be
2525useful when running the preprocessor on something that is not C code
2526and will be sent to a program which might be confused by the
2527@samp{#}-lines.
2528
2529@item -C
2530@findex -C
2531Do not discard comments: pass them through to the output file.
2532Comments appearing in arguments of a macro call will be copied to the
2533output before the expansion of the macro call.
2534
2535@item -traditional
2536@findex -traditional
2537Try to imitate the behavior of old-fashioned C, as opposed to ANSI C.
2538
2539@itemize @bullet
2540@item
2541Traditional macro expansion pays no attention to singlequote or
2542doublequote characters; macro argument symbols are replaced by the
2543argument values even when they appear within apparent string or
2544character constants.
2545
2546@item
2547Traditionally, it is permissible for a macro expansion to end in the
2548middle of a string or character constant.  The constant continues into
2549the text surrounding the macro call.
2550
2551@item
2552However, traditionally the end of the line terminates a string or
2553character constant, with no error.
2554
2555@item
2556In traditional C, a comment is equivalent to no text at all.  (In ANSI
2557C, a comment counts as whitespace.)
2558
2559@item
2560Traditional C does not have the concept of a ``preprocessing number''.
2561It considers @samp{1.0e+4} to be three tokens: @samp{1.0e}, @samp{+},
2562and @samp{4}.
2563
2564@item
2565A macro is not suppressed within its own definition, in traditional C.
2566Thus, any macro that is used recursively inevitably causes an error.
2567
2568@item
2569The character @samp{#} has no special meaning within a macro definition
2570in traditional C.
2571
2572@item
2573In traditional C, the text at the end of a macro expansion can run
2574together with the text after the macro call, to produce a single token.
2575(This is impossible in ANSI C.)
2576
2577@item
2578Traditionally, @samp{\} inside a macro argument suppresses the syntactic
2579significance of the following character.
2580@end itemize
2581
2582@item -trigraphs
2583@findex -trigraphs
2584Process ANSI standard trigraph sequences.  These are three-character
2585sequences, all starting with @samp{??}, that are defined by ANSI C to
2586stand for single characters.  For example, @samp{??/} stands for
2587@samp{\}, so @samp{'??/n'} is a character constant for a newline.
2588Strictly speaking, the GNU C preprocessor does not support all
2589programs in ANSI Standard C unless @samp{-trigraphs} is used, but if
2590you ever notice the difference it will be with relief.
2591
2592You don't want to know any more about trigraphs.
2593
2594@item -pedantic
2595@findex -pedantic
2596Issue warnings required by the ANSI C standard in certain cases such
2597as when text other than a comment follows @samp{#else} or @samp{#endif}.
2598
2599@item -pedantic-errors
2600@findex -pedantic-errors
2601Like @samp{-pedantic}, except that errors are produced rather than
2602warnings.
2603
2604@item -Wtrigraphs
2605@findex -Wtrigraphs
2606Warn if any trigraphs are encountered (assuming they are enabled).
2607
2608@item -Wcomment
2609@findex -Wcomment
2610@ignore
2611@c "Not worth documenting" both singular and plural forms of this
2612@c option, per RMS.  But also unclear which is better; hence may need to
2613@c switch this at some future date.  pesch@cygnus.com, 2jan92.
2614@itemx -Wcomments
2615(Both forms have the same effect).
2616@end ignore
2617Warn whenever a comment-start sequence @samp{/*} appears in a comment.
2618
2619@item -Wall
2620@findex -Wall
2621Requests both @samp{-Wtrigraphs} and @samp{-Wcomment} (but not
2622@samp{-Wtraditional}).
2623
2624@item -Wtraditional
2625@findex -Wtraditional
2626Warn about certain constructs that behave differently in traditional and
2627ANSI C.
2628
2629@item -I @var{directory}
2630@findex -I
2631Add the directory @var{directory} to the head of the list of
2632directories to be searched for header files (@pxref{Include Syntax}).
2633This can be used to override a system header file, substituting your
2634own version, since these directories are searched before the system
2635header file directories.  If you use more than one @samp{-I} option,
2636the directories are scanned in left-to-right order; the standard
2637system directories come after.
2638
2639@item -I-
2640Any directories specified with @samp{-I} options before the @samp{-I-}
2641option are searched only for the case of @samp{#include "@var{file}"};
2642they are not searched for @samp{#include <@var{file}>}.
2643
2644If additional directories are specified with @samp{-I} options after
2645the @samp{-I-}, these directories are searched for all @samp{#include}
2646directives.
2647
2648In addition, the @samp{-I-} option inhibits the use of the current
2649directory as the first search directory for @samp{#include "@var{file}"}.
2650Therefore, the current directory is searched only if it is requested
2651explicitly with @samp{-I.}.  Specifying both @samp{-I-} and @samp{-I.}
2652allows you to control precisely which directories are searched before
2653the current one and which are searched after.
2654
2655@item -nostdinc
2656@findex -nostdinc
2657Do not search the standard system directories for header files.
2658Only the directories you have specified with @samp{-I} options
2659(and the current directory, if appropriate) are searched.
2660
2661@item -nostdinc++
2662@findex -nostdinc++
2663Do not search for header files in the C++-specific standard directories,
2664but do still search the other standard directories.
2665(This option is used when building libg++.)
2666
2667@item -D @var{name}
2668@findex -D
2669Predefine @var{name} as a macro, with definition @samp{1}.
2670
2671@item -D @var{name}=@var{definition}
2672Predefine @var{name} as a macro, with definition @var{definition}.
2673There are no restrictions on the contents of @var{definition}, but if
2674you are invoking the preprocessor from a shell or shell-like program you
2675may need to use the shell's quoting syntax to protect characters such as
2676spaces that have a meaning in the shell syntax.  If you use more than
2677one @samp{-D} for the same @var{name}, the rightmost definition takes
2678effect.
2679
2680@item -U @var{name}
2681@findex -U
2682Do not predefine @var{name}.  If both @samp{-U} and @samp{-D} are
2683specified for one name, the @samp{-U} beats the @samp{-D} and the name
2684is not predefined.
2685
2686@item -undef
2687@findex -undef
2688Do not predefine any nonstandard macros.
2689
2690@item -A @var{predicate}(@var{answer})
2691@findex -A
2692Make an assertion with the predicate @var{predicate} and answer
2693@var{answer}.  @xref{Assertions}.
2694
2695@noindent
2696You can use @samp{-A-} to disable all predefined assertions; it also
2697undefines all predefined macros that identify the type of target system.
2698
2699@item -dM
2700@findex -dM
2701Instead of outputting the result of preprocessing, output a list of
2702@samp{#define} directives for all the macros defined during the
2703execution of the preprocessor, including predefined macros.  This gives
2704you a way of finding out what is predefined in your version of the
2705preprocessor; assuming you have no file @samp{foo.h}, the command
2706
2707@example
2708touch foo.h; cpp -dM foo.h
2709@end example
2710
2711@noindent
2712will show the values of any predefined macros.
2713
2714@item -dD
2715@findex -dD
2716Like @samp{-dM} except in two respects: it does @emph{not} include the
2717predefined macros, and it outputs @emph{both} the @samp{#define}
2718directives and the result of preprocessing.  Both kinds of output go to
2719the standard output file.
2720
2721@item -M [-MG]
2722@findex -M
2723Instead of outputting the result of preprocessing, output a rule
2724suitable for @code{make} describing the dependencies of the main
2725source file.  The preprocessor outputs one @code{make} rule containing
2726the object file name for that source file, a colon, and the names of
2727all the included files.  If there are many included files then the
2728rule is split into several lines using @samp{\}-newline.
2729
2730@samp{-MG} says to treat missing header files as generated files and assume
2731they live in the same directory as the source file.  It must be specified
2732in addition to @samp{-M}.
2733
2734This feature is used in automatic updating of makefiles.
2735
2736@item -MM [-MG]
2737@findex -MM
2738Like @samp{-M} but mention only the files included with @samp{#include
2739"@var{file}"}.  System header files included with @samp{#include
2740<@var{file}>} are omitted.
2741
2742@item -MD @var{file}
2743@findex -MD
2744Like @samp{-M} but the dependency information is written to @var{file}.
2745This is in addition to compiling the file as specified---@samp{-MD} does
2746not inhibit ordinary compilation the way @samp{-M} does.
2747
2748When invoking gcc, do not specify the @var{file} argument.
2749Gcc will create file names made by replacing ".c" with ".d" at
2750the end of the input file names.
2751
2752In Mach, you can use the utility @code{md} to merge multiple dependency
2753files into a single dependency file suitable for using with the @samp{make}
2754command.
2755
2756@item -MMD @var{file}
2757@findex -MMD
2758Like @samp{-MD} except mention only user header files, not system
2759header files.
2760
2761@item -H
2762@findex -H
2763Print the name of each header file used, in addition to other normal
2764activities.
2765
2766@item -imacros @var{file}
2767@findex -imacros
2768Process @var{file} as input, discarding the resulting output, before
2769processing the regular input file.  Because the output generated from
2770@var{file} is discarded, the only effect of @samp{-imacros @var{file}}
2771is to make the macros defined in @var{file} available for use in the
2772main input.
2773
2774@item -include @var{file}
2775@findex -include
2776Process @var{file} as input, and include all the resulting output,
2777before processing the regular input file. 
2778
2779@item -idirafter @var{dir}
2780@findex -idirafter
2781@cindex second include path
2782Add the directory @var{dir} to the second include path.  The directories
2783on the second include path are searched when a header file is not found
2784in any of the directories in the main include path (the one that
2785@samp{-I} adds to).
2786
2787@item -iprefix @var{prefix}
2788@findex -iprefix
2789Specify @var{prefix} as the prefix for subsequent @samp{-iwithprefix}
2790options.
2791
2792@item -iwithprefix @var{dir}
2793@findex -iwithprefix
2794Add a directory to the second include path.  The directory's name is
2795made by concatenating @var{prefix} and @var{dir}, where @var{prefix}
2796was specified previously with @samp{-iprefix}.
2797
2798@item -isystem @var{dir}
2799@findex -isystem
2800Add a directory to the beginning of the second include path, marking it
2801as a system directory, so that it gets the same special treatment as
2802is applied to the standard system directories.
2803
2804@item -lang-c
2805@itemx -lang-c89
2806@itemx -lang-c++
2807@itemx -lang-objc
2808@itemx -lang-objc++
2809@findex -lang-c
2810@findex -lang-c89
2811@findex -lang-c++
2812@findex -lang-objc
2813@findex -lang-objc++
2814Specify the source language.  @samp{-lang-c} is the default; it
2815allows recognition of C++ comments (comments that begin with
2816@samp{//} and end at end of line), since this is
2817a common feature and it will most likely be in the next C standard.
2818@samp{-lang-c89} disables recognition of C++ comments.  @samp{-lang-c++}
2819handles C++ comment syntax and includes extra default include
2820directories for C++.  @samp{-lang-objc} enables the Objective C
2821@samp{#import} directive.  @samp{-lang-objc++} enables both C++ and Objective C
2822extensions.
2823
2824These options are generated by the compiler driver @code{gcc}, but not
2825passed from the @samp{gcc} command line unless you use the driver's
2826@samp{-Wp} option.
2827
2828@item -lint
2829Look for commands to the program checker @code{lint} embedded in
2830comments, and emit them preceded by @samp{#pragma lint}.  For example,
2831the comment @samp{/* NOTREACHED */} becomes @samp{#pragma lint
2832NOTREACHED}.
2833
2834This option is available only when you call @code{cpp} directly;
2835@code{gcc} will not pass it from its command line.
2836
2837@item -$
2838@findex -$
2839Forbid the use of @samp{$} in identifiers.  This is required for ANSI
2840conformance.  @code{gcc} automatically supplies this option to the
2841preprocessor if you specify @samp{-ansi}, but @code{gcc} doesn't
2842recognize the @samp{-$} option itself---to use it without the other
2843effects of @samp{-ansi}, you must call the preprocessor directly.
2844
2845@end table
2846
2847@node Concept Index, Index, Invocation, Top
2848@unnumbered Concept Index
2849@printindex cp
2850
2851@node Index,, Concept Index, Top
2852@unnumbered Index of Directives, Macros and Options
2853@printindex fn
2854
2855@contents
2856@bye
Note: See TracBrowser for help on using the repository browser.