* linux_threads.c: Don't reference __pthread_initial_thread_bos.
[official-gcc.git] / gcc / extend.texi
blobf969f65b1892f64cd45b6d5078eb9ae39a03588f
1 @c Copyright (C) 1988,89,92,93,94,96,99 Free Software Foundation, Inc.
2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi.
5 @node C Extensions
6 @chapter Extensions to the C Language Family
7 @cindex extensions, C language
8 @cindex C language extensions
10 GNU C provides several language features not found in ANSI standard C.
11 (The @samp{-pedantic} option directs GNU CC to print a warning message if
12 any of these features is used.)  To test for the availability of these
13 features in conditional compilation, check for a predefined macro
14 @code{__GNUC__}, which is always defined under GNU CC.
16 These extensions are available in C and Objective C.  Most of them are
17 also available in C++.  @xref{C++ Extensions,,Extensions to the
18 C++ Language}, for extensions that apply @emph{only} to C++.
20 @c The only difference between the two versions of this menu is that the
21 @c version for clear INTERNALS has an extra node, "Constraints" (which
22 @c appears in a separate chapter in the other version of the manual).
23 @ifset INTERNALS
24 @menu
25 * Statement Exprs::     Putting statements and declarations inside expressions.
26 * Local Labels::        Labels local to a statement-expression.
27 * Labels as Values::    Getting pointers to labels, and computed gotos.
28 * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
29 * Constructing Calls::  Dispatching a call to another function.
30 * Naming Types::        Giving a name to the type of some expression.
31 * Typeof::              @code{typeof}: referring to the type of an expression.
32 * Lvalues::             Using @samp{?:}, @samp{,} and casts in lvalues.
33 * Conditionals::        Omitting the middle operand of a @samp{?:} expression.
34 * Long Long::           Double-word integers---@code{long long int}.
35 * Complex::             Data types for complex numbers.
36 * Hex Floats::          Hexadecimal floating-point constants.
37 * Zero Length::         Zero-length arrays.
38 * Variable Length::     Arrays whose length is computed at run time.
39 * Macro Varargs::       Macros with variable number of arguments.
40 * Subscripting::        Any array can be subscripted, even if not an lvalue.
41 * Pointer Arith::       Arithmetic on @code{void}-pointers and function pointers.
42 * Initializers::        Non-constant initializers.
43 * Constructors::        Constructor expressions give structures, unions
44                          or arrays as values.
45 * Labeled Elements::    Labeling elements of initializers.
46 * Cast to Union::       Casting to union type from any member of the union.
47 * Case Ranges::         `case 1 ... 9' and such.
48 * Function Attributes:: Declaring that functions have no side effects,
49                          or that they can never return.
50 * Function Prototypes:: Prototype declarations and old-style definitions.
51 * C++ Comments::        C++ comments are recognized.
52 * Dollar Signs::        Dollar sign is allowed in identifiers.
53 * Character Escapes::   @samp{\e} stands for the character @key{ESC}.
54 * Variable Attributes:: Specifying attributes of variables.
55 * Type Attributes::     Specifying attributes of types.
56 * Alignment::           Inquiring about the alignment of a type or variable.
57 * Inline::              Defining inline functions (as fast as macros).
58 * Extended Asm::        Assembler instructions with C expressions as operands.
59                          (With them you can define ``built-in'' functions.)
60 * Asm Labels::          Specifying the assembler name to use for a C symbol.
61 * Explicit Reg Vars::   Defining variables residing in specified registers.
62 * Alternate Keywords::  @code{__const__}, @code{__asm__}, etc., for header files.
63 * Incomplete Enums::    @code{enum foo;}, with details to follow.
64 * Function Names::      Printable strings which are the name of the current
65                          function.
66 * Return Address::      Getting the return or frame address of a function.
67 * Other Builtins::      Other built-in functions.
68 * Deprecated Features:: Things might disappear from g++.
69 @end menu
70 @end ifset
71 @ifclear INTERNALS
72 @menu
73 * Statement Exprs::     Putting statements and declarations inside expressions.
74 * Local Labels::        Labels local to a statement-expression.
75 * Labels as Values::    Getting pointers to labels, and computed gotos.
76 * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
77 * Constructing Calls::  Dispatching a call to another function.
78 * Naming Types::        Giving a name to the type of some expression.
79 * Typeof::              @code{typeof}: referring to the type of an expression.
80 * Lvalues::             Using @samp{?:}, @samp{,} and casts in lvalues.
81 * Conditionals::        Omitting the middle operand of a @samp{?:} expression.
82 * Long Long::           Double-word integers---@code{long long int}.
83 * Complex::             Data types for complex numbers.
84 * Hex Floats::          Hexadecimal floating-point constants.
85 * Zero Length::         Zero-length arrays.
86 * Variable Length::     Arrays whose length is computed at run time.
87 * Macro Varargs::       Macros with variable number of arguments.
88 * Subscripting::        Any array can be subscripted, even if not an lvalue.
89 * Pointer Arith::       Arithmetic on @code{void}-pointers and function pointers.
90 * Initializers::        Non-constant initializers.
91 * Constructors::        Constructor expressions give structures, unions
92                          or arrays as values.
93 * Labeled Elements::    Labeling elements of initializers.
94 * Cast to Union::       Casting to union type from any member of the union.
95 * Case Ranges::         `case 1 ... 9' and such.
96 * Function Attributes:: Declaring that functions have no side effects,
97                          or that they can never return.
98 * Function Prototypes:: Prototype declarations and old-style definitions.
99 * C++ Comments::        C++ comments are recognized.
100 * Dollar Signs::        Dollar sign is allowed in identifiers.
101 * Character Escapes::   @samp{\e} stands for the character @key{ESC}.
102 * Variable Attributes:: Specifying attributes of variables.
103 * Type Attributes::     Specifying attributes of types.
104 * Alignment::           Inquiring about the alignment of a type or variable.
105 * Inline::              Defining inline functions (as fast as macros).
106 * Extended Asm::        Assembler instructions with C expressions as operands.
107                          (With them you can define ``built-in'' functions.)
108 * Constraints::         Constraints for asm operands
109 * Asm Labels::          Specifying the assembler name to use for a C symbol.
110 * Explicit Reg Vars::   Defining variables residing in specified registers.
111 * Alternate Keywords::  @code{__const__}, @code{__asm__}, etc., for header files.
112 * Incomplete Enums::    @code{enum foo;}, with details to follow.
113 * Function Names::      Printable strings which are the name of the current
114                          function.
115 * Return Address::      Getting the return or frame address of a function.
116 * Deprecated Features:: Things might disappear from g++.
117 @end menu
118 @end ifclear
120 @node Statement Exprs
121 @section Statements and Declarations in Expressions
122 @cindex statements inside expressions
123 @cindex declarations inside expressions
124 @cindex expressions containing statements
125 @cindex macros, statements in expressions
127 @c the above section title wrapped and causes an underfull hbox.. i
128 @c changed it from "within" to "in". --mew 4feb93
130 A compound statement enclosed in parentheses may appear as an expression
131 in GNU C.  This allows you to use loops, switches, and local variables
132 within an expression.
134 Recall that a compound statement is a sequence of statements surrounded
135 by braces; in this construct, parentheses go around the braces.  For
136 example:
138 @example
139 (@{ int y = foo (); int z;
140    if (y > 0) z = y;
141    else z = - y;
142    z; @})
143 @end example
145 @noindent
146 is a valid (though slightly more complex than necessary) expression
147 for the absolute value of @code{foo ()}.
149 The last thing in the compound statement should be an expression
150 followed by a semicolon; the value of this subexpression serves as the
151 value of the entire construct.  (If you use some other kind of statement
152 last within the braces, the construct has type @code{void}, and thus
153 effectively no value.)
155 This feature is especially useful in making macro definitions ``safe'' (so
156 that they evaluate each operand exactly once).  For example, the
157 ``maximum'' function is commonly defined as a macro in standard C as
158 follows:
160 @example
161 #define max(a,b) ((a) > (b) ? (a) : (b))
162 @end example
164 @noindent
165 @cindex side effects, macro argument
166 But this definition computes either @var{a} or @var{b} twice, with bad
167 results if the operand has side effects.  In GNU C, if you know the
168 type of the operands (here let's assume @code{int}), you can define
169 the macro safely as follows:
171 @example
172 #define maxint(a,b) \
173   (@{int _a = (a), _b = (b); _a > _b ? _a : _b; @})
174 @end example
176 Embedded statements are not allowed in constant expressions, such as
177 the value of an enumeration constant, the width of a bit field, or
178 the initial value of a static variable.
180 If you don't know the type of the operand, you can still do this, but you
181 must use @code{typeof} (@pxref{Typeof}) or type naming (@pxref{Naming
182 Types}).
184 @node Local Labels
185 @section Locally Declared Labels
186 @cindex local labels
187 @cindex macros, local labels
189 Each statement expression is a scope in which @dfn{local labels} can be
190 declared.  A local label is simply an identifier; you can jump to it
191 with an ordinary @code{goto} statement, but only from within the
192 statement expression it belongs to.
194 A local label declaration looks like this:
196 @example
197 __label__ @var{label};
198 @end example
200 @noindent
203 @example
204 __label__ @var{label1}, @var{label2}, @dots{};
205 @end example
207 Local label declarations must come at the beginning of the statement
208 expression, right after the @samp{(@{}, before any ordinary
209 declarations.
211 The label declaration defines the label @emph{name}, but does not define
212 the label itself.  You must do this in the usual way, with
213 @code{@var{label}:}, within the statements of the statement expression.
215 The local label feature is useful because statement expressions are
216 often used in macros.  If the macro contains nested loops, a @code{goto}
217 can be useful for breaking out of them.  However, an ordinary label
218 whose scope is the whole function cannot be used: if the macro can be
219 expanded several times in one function, the label will be multiply
220 defined in that function.  A local label avoids this problem.  For
221 example:
223 @example
224 #define SEARCH(array, target)                     \
225 (@{                                               \
226   __label__ found;                                \
227   typeof (target) _SEARCH_target = (target);      \
228   typeof (*(array)) *_SEARCH_array = (array);     \
229   int i, j;                                       \
230   int value;                                      \
231   for (i = 0; i < max; i++)                       \
232     for (j = 0; j < max; j++)                     \
233       if (_SEARCH_array[i][j] == _SEARCH_target)  \
234         @{ value = i; goto found; @}              \
235   value = -1;                                     \
236  found:                                           \
237   value;                                          \
239 @end example
241 @node Labels as Values
242 @section Labels as Values
243 @cindex labels as values
244 @cindex computed gotos
245 @cindex goto with computed label
246 @cindex address of a label
248 You can get the address of a label defined in the current function
249 (or a containing function) with the unary operator @samp{&&}.  The
250 value has type @code{void *}.  This value is a constant and can be used
251 wherever a constant of that type is valid.  For example:
253 @example
254 void *ptr;
255 @dots{}
256 ptr = &&foo;
257 @end example
259 To use these values, you need to be able to jump to one.  This is done
260 with the computed goto statement@footnote{The analogous feature in
261 Fortran is called an assigned goto, but that name seems inappropriate in
262 C, where one can do more than simply store label addresses in label
263 variables.}, @code{goto *@var{exp};}.  For example,
265 @example
266 goto *ptr;
267 @end example
269 @noindent
270 Any expression of type @code{void *} is allowed.
272 One way of using these constants is in initializing a static array that
273 will serve as a jump table:
275 @example
276 static void *array[] = @{ &&foo, &&bar, &&hack @};
277 @end example
279 Then you can select a label with indexing, like this:
281 @example
282 goto *array[i];
283 @end example
285 @noindent
286 Note that this does not check whether the subscript is in bounds---array
287 indexing in C never does that.
289 Such an array of label values serves a purpose much like that of the
290 @code{switch} statement.  The @code{switch} statement is cleaner, so
291 use that rather than an array unless the problem does not fit a
292 @code{switch} statement very well.
294 Another use of label values is in an interpreter for threaded code.
295 The labels within the interpreter function can be stored in the
296 threaded code for super-fast dispatching.
298 You can use this mechanism to jump to code in a different function.  If
299 you do that, totally unpredictable things will happen.  The best way to
300 avoid this is to store the label address only in automatic variables and
301 never pass it as an argument.
303 @node Nested Functions
304 @section Nested Functions
305 @cindex nested functions
306 @cindex downward funargs
307 @cindex thunks
309 A @dfn{nested function} is a function defined inside another function.
310 (Nested functions are not supported for GNU C++.)  The nested function's
311 name is local to the block where it is defined.  For example, here we
312 define a nested function named @code{square}, and call it twice:
314 @example
315 @group
316 foo (double a, double b)
318   double square (double z) @{ return z * z; @}
320   return square (a) + square (b);
322 @end group
323 @end example
325 The nested function can access all the variables of the containing
326 function that are visible at the point of its definition.  This is
327 called @dfn{lexical scoping}.  For example, here we show a nested
328 function which uses an inherited variable named @code{offset}:
330 @example
331 bar (int *array, int offset, int size)
333   int access (int *array, int index)
334     @{ return array[index + offset]; @}
335   int i;
336   @dots{}
337   for (i = 0; i < size; i++)
338     @dots{} access (array, i) @dots{}
340 @end example
342 Nested function definitions are permitted within functions in the places
343 where variable definitions are allowed; that is, in any block, before
344 the first statement in the block.
346 It is possible to call the nested function from outside the scope of its
347 name by storing its address or passing the address to another function:
349 @example
350 hack (int *array, int size)
352   void store (int index, int value)
353     @{ array[index] = value; @}
355   intermediate (store, size);
357 @end example
359 Here, the function @code{intermediate} receives the address of
360 @code{store} as an argument.  If @code{intermediate} calls @code{store},
361 the arguments given to @code{store} are used to store into @code{array}.
362 But this technique works only so long as the containing function
363 (@code{hack}, in this example) does not exit.
365 If you try to call the nested function through its address after the
366 containing function has exited, all hell will break loose.  If you try
367 to call it after a containing scope level has exited, and if it refers
368 to some of the variables that are no longer in scope, you may be lucky,
369 but it's not wise to take the risk.  If, however, the nested function
370 does not refer to anything that has gone out of scope, you should be
371 safe.
373 GNU CC implements taking the address of a nested function using a
374 technique called @dfn{trampolines}.   A paper describing them is
375 available as @samp{http://master.debian.org/~karlheg/Usenix88-lexic.pdf}.
377 A nested function can jump to a label inherited from a containing
378 function, provided the label was explicitly declared in the containing
379 function (@pxref{Local Labels}).  Such a jump returns instantly to the
380 containing function, exiting the nested function which did the
381 @code{goto} and any intermediate functions as well.  Here is an example:
383 @example
384 @group
385 bar (int *array, int offset, int size)
387   __label__ failure;
388   int access (int *array, int index)
389     @{
390       if (index > size)
391         goto failure;
392       return array[index + offset];
393     @}
394   int i;
395   @dots{}
396   for (i = 0; i < size; i++)
397     @dots{} access (array, i) @dots{}
398   @dots{}
399   return 0;
401  /* @r{Control comes here from @code{access}
402     if it detects an error.}  */
403  failure:
404   return -1;
406 @end group
407 @end example
409 A nested function always has internal linkage.  Declaring one with
410 @code{extern} is erroneous.  If you need to declare the nested function
411 before its definition, use @code{auto} (which is otherwise meaningless
412 for function declarations).
414 @example
415 bar (int *array, int offset, int size)
417   __label__ failure;
418   auto int access (int *, int);
419   @dots{}
420   int access (int *array, int index)
421     @{
422       if (index > size)
423         goto failure;
424       return array[index + offset];
425     @}
426   @dots{}
428 @end example
430 @node Constructing Calls
431 @section Constructing Function Calls
432 @cindex constructing calls
433 @cindex forwarding calls
435 Using the built-in functions described below, you can record
436 the arguments a function received, and call another function
437 with the same arguments, without knowing the number or types
438 of the arguments.
440 You can also record the return value of that function call,
441 and later return that value, without knowing what data type
442 the function tried to return (as long as your caller expects
443 that data type).
445 @table @code
446 @findex __builtin_apply_args
447 @item __builtin_apply_args ()
448 This built-in function returns a pointer of type @code{void *} to data
449 describing how to perform a call with the same arguments as were passed
450 to the current function.
452 The function saves the arg pointer register, structure value address,
453 and all registers that might be used to pass arguments to a function
454 into a block of memory allocated on the stack.  Then it returns the
455 address of that block.
457 @findex __builtin_apply
458 @item __builtin_apply (@var{function}, @var{arguments}, @var{size})
459 This built-in function invokes @var{function} (type @code{void (*)()})
460 with a copy of the parameters described by @var{arguments} (type
461 @code{void *}) and @var{size} (type @code{int}).
463 The value of @var{arguments} should be the value returned by
464 @code{__builtin_apply_args}.  The argument @var{size} specifies the size
465 of the stack argument data, in bytes.
467 This function returns a pointer of type @code{void *} to data describing
468 how to return whatever value was returned by @var{function}.  The data
469 is saved in a block of memory allocated on the stack.
471 It is not always simple to compute the proper value for @var{size}.  The
472 value is used by @code{__builtin_apply} to compute the amount of data
473 that should be pushed on the stack and copied from the incoming argument
474 area.
476 @findex __builtin_return
477 @item __builtin_return (@var{result})
478 This built-in function returns the value described by @var{result} from
479 the containing function.  You should specify, for @var{result}, a value
480 returned by @code{__builtin_apply}.
481 @end table
483 @node Naming Types
484 @section Naming an Expression's Type
485 @cindex naming types
487 You can give a name to the type of an expression using a @code{typedef}
488 declaration with an initializer.  Here is how to define @var{name} as a
489 type name for the type of @var{exp}:
491 @example
492 typedef @var{name} = @var{exp};
493 @end example
495 This is useful in conjunction with the statements-within-expressions
496 feature.  Here is how the two together can be used to define a safe
497 ``maximum'' macro that operates on any arithmetic type:
499 @example
500 #define max(a,b) \
501   (@{typedef _ta = (a), _tb = (b);  \
502     _ta _a = (a); _tb _b = (b);     \
503     _a > _b ? _a : _b; @})
504 @end example
506 @cindex underscores in variables in macros
507 @cindex @samp{_} in variables in macros
508 @cindex local variables in macros
509 @cindex variables, local, in macros
510 @cindex macros, local variables in
512 The reason for using names that start with underscores for the local
513 variables is to avoid conflicts with variable names that occur within the
514 expressions that are substituted for @code{a} and @code{b}.  Eventually we
515 hope to design a new form of declaration syntax that allows you to declare
516 variables whose scopes start only after their initializers; this will be a
517 more reliable way to prevent such conflicts.
519 @node Typeof
520 @section Referring to a Type with @code{typeof}
521 @findex typeof
522 @findex sizeof
523 @cindex macros, types of arguments
525 Another way to refer to the type of an expression is with @code{typeof}.
526 The syntax of using of this keyword looks like @code{sizeof}, but the
527 construct acts semantically like a type name defined with @code{typedef}.
529 There are two ways of writing the argument to @code{typeof}: with an
530 expression or with a type.  Here is an example with an expression:
532 @example
533 typeof (x[0](1))
534 @end example
536 @noindent
537 This assumes that @code{x} is an array of functions; the type described
538 is that of the values of the functions.
540 Here is an example with a typename as the argument:
542 @example
543 typeof (int *)
544 @end example
546 @noindent
547 Here the type described is that of pointers to @code{int}.
549 If you are writing a header file that must work when included in ANSI C
550 programs, write @code{__typeof__} instead of @code{typeof}.
551 @xref{Alternate Keywords}.
553 A @code{typeof}-construct can be used anywhere a typedef name could be
554 used.  For example, you can use it in a declaration, in a cast, or inside
555 of @code{sizeof} or @code{typeof}.
557 @itemize @bullet
558 @item
559 This declares @code{y} with the type of what @code{x} points to.
561 @example
562 typeof (*x) y;
563 @end example
565 @item
566 This declares @code{y} as an array of such values.
568 @example
569 typeof (*x) y[4];
570 @end example
572 @item
573 This declares @code{y} as an array of pointers to characters:
575 @example
576 typeof (typeof (char *)[4]) y;
577 @end example
579 @noindent
580 It is equivalent to the following traditional C declaration:
582 @example
583 char *y[4];
584 @end example
586 To see the meaning of the declaration using @code{typeof}, and why it
587 might be a useful way to write, let's rewrite it with these macros:
589 @example
590 #define pointer(T)  typeof(T *)
591 #define array(T, N) typeof(T [N])
592 @end example
594 @noindent
595 Now the declaration can be rewritten this way:
597 @example
598 array (pointer (char), 4) y;
599 @end example
601 @noindent
602 Thus, @code{array (pointer (char), 4)} is the type of arrays of 4
603 pointers to @code{char}.
604 @end itemize
606 @node Lvalues
607 @section Generalized Lvalues
608 @cindex compound expressions as lvalues
609 @cindex expressions, compound, as lvalues
610 @cindex conditional expressions as lvalues
611 @cindex expressions, conditional, as lvalues
612 @cindex casts as lvalues
613 @cindex generalized lvalues
614 @cindex lvalues, generalized
615 @cindex extensions, @code{?:}
616 @cindex @code{?:} extensions
617 Compound expressions, conditional expressions and casts are allowed as
618 lvalues provided their operands are lvalues.  This means that you can take
619 their addresses or store values into them.
621 Standard C++ allows compound expressions and conditional expressions as
622 lvalues, and permits casts to reference type, so use of this extension
623 is deprecated for C++ code.
625 For example, a compound expression can be assigned, provided the last
626 expression in the sequence is an lvalue.  These two expressions are
627 equivalent:
629 @example
630 (a, b) += 5
631 a, (b += 5)
632 @end example
634 Similarly, the address of the compound expression can be taken.  These two
635 expressions are equivalent:
637 @example
638 &(a, b)
639 a, &b
640 @end example
642 A conditional expression is a valid lvalue if its type is not void and the
643 true and false branches are both valid lvalues.  For example, these two
644 expressions are equivalent:
646 @example
647 (a ? b : c) = 5
648 (a ? b = 5 : (c = 5))
649 @end example
651 A cast is a valid lvalue if its operand is an lvalue.  A simple
652 assignment whose left-hand side is a cast works by converting the
653 right-hand side first to the specified type, then to the type of the
654 inner left-hand side expression.  After this is stored, the value is
655 converted back to the specified type to become the value of the
656 assignment.  Thus, if @code{a} has type @code{char *}, the following two
657 expressions are equivalent:
659 @example
660 (int)a = 5
661 (int)(a = (char *)(int)5)
662 @end example
664 An assignment-with-arithmetic operation such as @samp{+=} applied to a cast
665 performs the arithmetic using the type resulting from the cast, and then
666 continues as in the previous case.  Therefore, these two expressions are
667 equivalent:
669 @example
670 (int)a += 5
671 (int)(a = (char *)(int) ((int)a + 5))
672 @end example
674 You cannot take the address of an lvalue cast, because the use of its
675 address would not work out coherently.  Suppose that @code{&(int)f} were
676 permitted, where @code{f} has type @code{float}.  Then the following
677 statement would try to store an integer bit-pattern where a floating
678 point number belongs:
680 @example
681 *&(int)f = 1;
682 @end example
684 This is quite different from what @code{(int)f = 1} would do---that
685 would convert 1 to floating point and store it.  Rather than cause this
686 inconsistency, we think it is better to prohibit use of @samp{&} on a cast.
688 If you really do want an @code{int *} pointer with the address of
689 @code{f}, you can simply write @code{(int *)&f}.
691 @node Conditionals
692 @section Conditionals with Omitted Operands
693 @cindex conditional expressions, extensions
694 @cindex omitted middle-operands
695 @cindex middle-operands, omitted
696 @cindex extensions, @code{?:}
697 @cindex @code{?:} extensions
699 The middle operand in a conditional expression may be omitted.  Then
700 if the first operand is nonzero, its value is the value of the conditional
701 expression.
703 Therefore, the expression
705 @example
706 x ? : y
707 @end example
709 @noindent
710 has the value of @code{x} if that is nonzero; otherwise, the value of
711 @code{y}.
713 This example is perfectly equivalent to
715 @example
716 x ? x : y
717 @end example
719 @cindex side effect in ?:
720 @cindex ?: side effect
721 @noindent
722 In this simple case, the ability to omit the middle operand is not
723 especially useful.  When it becomes useful is when the first operand does,
724 or may (if it is a macro argument), contain a side effect.  Then repeating
725 the operand in the middle would perform the side effect twice.  Omitting
726 the middle operand uses the value already computed without the undesirable
727 effects of recomputing it.
729 @node Long Long
730 @section Double-Word Integers
731 @cindex @code{long long} data types
732 @cindex double-word arithmetic
733 @cindex multiprecision arithmetic
735 GNU C supports data types for integers that are twice as long as
736 @code{int}.  Simply write @code{long long int} for a signed integer, or
737 @code{unsigned long long int} for an unsigned integer.  To make an
738 integer constant of type @code{long long int}, add the suffix @code{LL}
739 to the integer.  To make an integer constant of type @code{unsigned long
740 long int}, add the suffix @code{ULL} to the integer.
742 You can use these types in arithmetic like any other integer types.
743 Addition, subtraction, and bitwise boolean operations on these types
744 are open-coded on all types of machines.  Multiplication is open-coded
745 if the machine supports fullword-to-doubleword a widening multiply
746 instruction.  Division and shifts are open-coded only on machines that
747 provide special support.  The operations that are not open-coded use
748 special library routines that come with GNU CC.
750 There may be pitfalls when you use @code{long long} types for function
751 arguments, unless you declare function prototypes.  If a function
752 expects type @code{int} for its argument, and you pass a value of type
753 @code{long long int}, confusion will result because the caller and the
754 subroutine will disagree about the number of bytes for the argument.
755 Likewise, if the function expects @code{long long int} and you pass
756 @code{int}.  The best way to avoid such problems is to use prototypes.
758 @node Complex
759 @section Complex Numbers
760 @cindex complex numbers
762 GNU C supports complex data types.  You can declare both complex integer
763 types and complex floating types, using the keyword @code{__complex__}.
765 For example, @samp{__complex__ double x;} declares @code{x} as a
766 variable whose real part and imaginary part are both of type
767 @code{double}.  @samp{__complex__ short int y;} declares @code{y} to
768 have real and imaginary parts of type @code{short int}; this is not
769 likely to be useful, but it shows that the set of complex types is
770 complete.
772 To write a constant with a complex data type, use the suffix @samp{i} or
773 @samp{j} (either one; they are equivalent).  For example, @code{2.5fi}
774 has type @code{__complex__ float} and @code{3i} has type
775 @code{__complex__ int}.  Such a constant always has a pure imaginary
776 value, but you can form any complex value you like by adding one to a
777 real constant.
779 To extract the real part of a complex-valued expression @var{exp}, write
780 @code{__real__ @var{exp}}.  Likewise, use @code{__imag__} to
781 extract the imaginary part.
783 The operator @samp{~} performs complex conjugation when used on a value
784 with a complex type.
786 GNU CC can allocate complex automatic variables in a noncontiguous
787 fashion; it's even possible for the real part to be in a register while
788 the imaginary part is on the stack (or vice-versa).  None of the
789 supported debugging info formats has a way to represent noncontiguous
790 allocation like this, so GNU CC describes a noncontiguous complex
791 variable as if it were two separate variables of noncomplex type.
792 If the variable's actual name is @code{foo}, the two fictitious
793 variables are named @code{foo$real} and @code{foo$imag}.  You can
794 examine and set these two fictitious variables with your debugger.
796 A future version of GDB will know how to recognize such pairs and treat
797 them as a single variable with a complex type.
799 @node Hex Floats
800 @section Hex Floats
801 @cindex hex floats
802 GNU CC recognizes floating-point numbers written not only in the usual
803 decimal notation, such as @code{1.55e1}, but also numbers such as
804 @code{0x1.fp3} written in hexadecimal format.  In that format the
805 @code{0x} hex introducer and the @code{p} or @code{P} exponent field are
806 mandatory.  The exponent is a decimal number that indicates the power of
807 2 by which the significand part will be multiplied.  Thus @code{0x1.f} is
808 1 15/16, @code{p3} multiplies it by 8, and the value of @code{0x1.fp3}
809 is the same as @code{1.55e1}.
811 Unlike for floating-point numbers in the decimal notation the exponent
812 is always required in the hexadecimal notation.  Otherwise the compiler
813 would not be able to resolve the ambiguity of, e.g., @code{0x1.f}.  This
814 could mean @code{1.0f} or @code{1.9375} since @code{f} is also the
815 extension for floating-point constants of type @code{float}.
817 @node Zero Length
818 @section Arrays of Length Zero
819 @cindex arrays of length zero
820 @cindex zero-length arrays
821 @cindex length-zero arrays
823 Zero-length arrays are allowed in GNU C.  They are very useful as the last
824 element of a structure which is really a header for a variable-length
825 object:
827 @example
828 struct line @{
829   int length;
830   char contents[0];
834   struct line *thisline = (struct line *)
835     malloc (sizeof (struct line) + this_length);
836   thisline->length = this_length;
838 @end example
840 In standard C, you would have to give @code{contents} a length of 1, which
841 means either you waste space or complicate the argument to @code{malloc}.
843 @node Variable Length
844 @section Arrays of Variable Length
845 @cindex variable-length arrays
846 @cindex arrays of variable length
848 Variable-length automatic arrays are allowed in GNU C.  These arrays are
849 declared like any other automatic arrays, but with a length that is not
850 a constant expression.  The storage is allocated at the point of
851 declaration and deallocated when the brace-level is exited.  For
852 example:
854 @example
855 FILE *
856 concat_fopen (char *s1, char *s2, char *mode)
858   char str[strlen (s1) + strlen (s2) + 1];
859   strcpy (str, s1);
860   strcat (str, s2);
861   return fopen (str, mode);
863 @end example
865 @cindex scope of a variable length array
866 @cindex variable-length array scope
867 @cindex deallocating variable length arrays
868 Jumping or breaking out of the scope of the array name deallocates the
869 storage.  Jumping into the scope is not allowed; you get an error
870 message for it.
872 @cindex @code{alloca} vs variable-length arrays
873 You can use the function @code{alloca} to get an effect much like
874 variable-length arrays.  The function @code{alloca} is available in
875 many other C implementations (but not in all).  On the other hand,
876 variable-length arrays are more elegant.
878 There are other differences between these two methods.  Space allocated
879 with @code{alloca} exists until the containing @emph{function} returns.
880 The space for a variable-length array is deallocated as soon as the array
881 name's scope ends.  (If you use both variable-length arrays and
882 @code{alloca} in the same function, deallocation of a variable-length array
883 will also deallocate anything more recently allocated with @code{alloca}.)
885 You can also use variable-length arrays as arguments to functions:
887 @example
888 struct entry
889 tester (int len, char data[len][len])
891   @dots{}
893 @end example
895 The length of an array is computed once when the storage is allocated
896 and is remembered for the scope of the array in case you access it with
897 @code{sizeof}.
899 If you want to pass the array first and the length afterward, you can
900 use a forward declaration in the parameter list---another GNU extension.
902 @example
903 struct entry
904 tester (int len; char data[len][len], int len)
906   @dots{}
908 @end example
910 @cindex parameter forward declaration
911 The @samp{int len} before the semicolon is a @dfn{parameter forward
912 declaration}, and it serves the purpose of making the name @code{len}
913 known when the declaration of @code{data} is parsed.
915 You can write any number of such parameter forward declarations in the
916 parameter list.  They can be separated by commas or semicolons, but the
917 last one must end with a semicolon, which is followed by the ``real''
918 parameter declarations.  Each forward declaration must match a ``real''
919 declaration in parameter name and data type.
921 @node Macro Varargs
922 @section Macros with Variable Numbers of Arguments
923 @cindex variable number of arguments
924 @cindex macro with variable arguments
925 @cindex rest argument (in macro)
927 In GNU C, a macro can accept a variable number of arguments, much as a
928 function can.  The syntax for defining the macro looks much like that
929 used for a function.  Here is an example:
931 @example
932 #define eprintf(format, args...)  \
933  fprintf (stderr, format , ## args)
934 @end example
936 Here @code{args} is a @dfn{rest argument}: it takes in zero or more
937 arguments, as many as the call contains.  All of them plus the commas
938 between them form the value of @code{args}, which is substituted into
939 the macro body where @code{args} is used.  Thus, we have this expansion:
941 @example
942 eprintf ("%s:%d: ", input_file_name, line_number)
943 @expansion{}
944 fprintf (stderr, "%s:%d: " , input_file_name, line_number)
945 @end example
947 @noindent
948 Note that the comma after the string constant comes from the definition
949 of @code{eprintf}, whereas the last comma comes from the value of
950 @code{args}.
952 The reason for using @samp{##} is to handle the case when @code{args}
953 matches no arguments at all.  In this case, @code{args} has an empty
954 value.  In this case, the second comma in the definition becomes an
955 embarrassment: if it got through to the expansion of the macro, we would
956 get something like this:
958 @example
959 fprintf (stderr, "success!\n" , )
960 @end example
962 @noindent
963 which is invalid C syntax.  @samp{##} gets rid of the comma, so we get
964 the following instead:
966 @example
967 fprintf (stderr, "success!\n")
968 @end example
970 This is a special feature of the GNU C preprocessor: @samp{##} before a
971 rest argument that is empty discards the preceding sequence of
972 non-whitespace characters from the macro definition.  (If another macro
973 argument precedes, none of it is discarded.)
975 It might be better to discard the last preprocessor token instead of the
976 last preceding sequence of non-whitespace characters; in fact, we may
977 someday change this feature to do so.  We advise you to write the macro
978 definition so that the preceding sequence of non-whitespace characters
979 is just a single token, so that the meaning will not change if we change
980 the definition of this feature.
982 @node Subscripting
983 @section Non-Lvalue Arrays May Have Subscripts
984 @cindex subscripting
985 @cindex arrays, non-lvalue
987 @cindex subscripting and function values
988 Subscripting is allowed on arrays that are not lvalues, even though the
989 unary @samp{&} operator is not.  For example, this is valid in GNU C though
990 not valid in other C dialects:
992 @example
993 @group
994 struct foo @{int a[4];@};
996 struct foo f();
998 bar (int index)
1000   return f().a[index];
1002 @end group
1003 @end example
1005 @node Pointer Arith
1006 @section Arithmetic on @code{void}- and Function-Pointers
1007 @cindex void pointers, arithmetic
1008 @cindex void, size of pointer to
1009 @cindex function pointers, arithmetic
1010 @cindex function, size of pointer to
1012 In GNU C, addition and subtraction operations are supported on pointers to
1013 @code{void} and on pointers to functions.  This is done by treating the
1014 size of a @code{void} or of a function as 1.
1016 A consequence of this is that @code{sizeof} is also allowed on @code{void}
1017 and on function types, and returns 1.
1019 The option @samp{-Wpointer-arith} requests a warning if these extensions
1020 are used.
1022 @node Initializers
1023 @section Non-Constant Initializers
1024 @cindex initializers, non-constant
1025 @cindex non-constant initializers
1027 As in standard C++, the elements of an aggregate initializer for an
1028 automatic variable are not required to be constant expressions in GNU C.
1029 Here is an example of an initializer with run-time varying elements:
1031 @example
1032 foo (float f, float g)
1034   float beat_freqs[2] = @{ f-g, f+g @};
1035   @dots{}
1037 @end example
1039 @node Constructors
1040 @section Constructor Expressions
1041 @cindex constructor expressions
1042 @cindex initializations in expressions
1043 @cindex structures, constructor expression
1044 @cindex expressions, constructor
1046 GNU C supports constructor expressions.  A constructor looks like
1047 a cast containing an initializer.  Its value is an object of the
1048 type specified in the cast, containing the elements specified in
1049 the initializer.
1051 Usually, the specified type is a structure.  Assume that
1052 @code{struct foo} and @code{structure} are declared as shown:
1054 @example
1055 struct foo @{int a; char b[2];@} structure;
1056 @end example
1058 @noindent
1059 Here is an example of constructing a @code{struct foo} with a constructor:
1061 @example
1062 structure = ((struct foo) @{x + y, 'a', 0@});
1063 @end example
1065 @noindent
1066 This is equivalent to writing the following:
1068 @example
1070   struct foo temp = @{x + y, 'a', 0@};
1071   structure = temp;
1073 @end example
1075 You can also construct an array.  If all the elements of the constructor
1076 are (made up of) simple constant expressions, suitable for use in
1077 initializers, then the constructor is an lvalue and can be coerced to a
1078 pointer to its first element, as shown here:
1080 @example
1081 char **foo = (char *[]) @{ "x", "y", "z" @};
1082 @end example
1084 Array constructors whose elements are not simple constants are
1085 not very useful, because the constructor is not an lvalue.  There
1086 are only two valid ways to use it: to subscript it, or initialize
1087 an array variable with it.  The former is probably slower than a
1088 @code{switch} statement, while the latter does the same thing an
1089 ordinary C initializer would do.  Here is an example of
1090 subscripting an array constructor:
1092 @example
1093 output = ((int[]) @{ 2, x, 28 @}) [input];
1094 @end example
1096 Constructor expressions for scalar types and union types are is
1097 also allowed, but then the constructor expression is equivalent
1098 to a cast.
1100 @node Labeled Elements
1101 @section Labeled Elements in Initializers
1102 @cindex initializers with labeled elements
1103 @cindex labeled elements in initializers
1104 @cindex case labels in initializers
1106 Standard C requires the elements of an initializer to appear in a fixed
1107 order, the same as the order of the elements in the array or structure
1108 being initialized.
1110 In GNU C you can give the elements in any order, specifying the array
1111 indices or structure field names they apply to.  This extension is not
1112 implemented in GNU C++.
1114 To specify an array index, write @samp{[@var{index}]} or
1115 @samp{[@var{index}] =} before the element value.  For example,
1117 @example
1118 int a[6] = @{ [4] 29, [2] = 15 @};
1119 @end example
1121 @noindent
1122 is equivalent to
1124 @example
1125 int a[6] = @{ 0, 0, 15, 0, 29, 0 @};
1126 @end example
1128 @noindent
1129 The index values must be constant expressions, even if the array being
1130 initialized is automatic.
1132 To initialize a range of elements to the same value, write
1133 @samp{[@var{first} ... @var{last}] = @var{value}}.  For example,
1135 @example
1136 int widths[] = @{ [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 @};
1137 @end example
1139 @noindent
1140 Note that the length of the array is the highest value specified
1141 plus one.
1143 In a structure initializer, specify the name of a field to initialize
1144 with @samp{@var{fieldname}:} before the element value.  For example,
1145 given the following structure,
1147 @example
1148 struct point @{ int x, y; @};
1149 @end example
1151 @noindent
1152 the following initialization
1154 @example
1155 struct point p = @{ y: yvalue, x: xvalue @};
1156 @end example
1158 @noindent
1159 is equivalent to
1161 @example
1162 struct point p = @{ xvalue, yvalue @};
1163 @end example
1165 Another syntax which has the same meaning is @samp{.@var{fieldname} =}.,
1166 as shown here:
1168 @example
1169 struct point p = @{ .y = yvalue, .x = xvalue @};
1170 @end example
1172 You can also use an element label (with either the colon syntax or the
1173 period-equal syntax) when initializing a union, to specify which element
1174 of the union should be used.  For example,
1176 @example
1177 union foo @{ int i; double d; @};
1179 union foo f = @{ d: 4 @};
1180 @end example
1182 @noindent
1183 will convert 4 to a @code{double} to store it in the union using
1184 the second element.  By contrast, casting 4 to type @code{union foo}
1185 would store it into the union as the integer @code{i}, since it is
1186 an integer.  (@xref{Cast to Union}.)
1188 You can combine this technique of naming elements with ordinary C
1189 initialization of successive elements.  Each initializer element that
1190 does not have a label applies to the next consecutive element of the
1191 array or structure.  For example,
1193 @example
1194 int a[6] = @{ [1] = v1, v2, [4] = v4 @};
1195 @end example
1197 @noindent
1198 is equivalent to
1200 @example
1201 int a[6] = @{ 0, v1, v2, 0, v4, 0 @};
1202 @end example
1204 Labeling the elements of an array initializer is especially useful
1205 when the indices are characters or belong to an @code{enum} type.
1206 For example:
1208 @example
1209 int whitespace[256]
1210   = @{ [' '] = 1, ['\t'] = 1, ['\h'] = 1,
1211       ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 @};
1212 @end example
1214 @node Case Ranges
1215 @section Case Ranges
1216 @cindex case ranges
1217 @cindex ranges in case statements
1219 You can specify a range of consecutive values in a single @code{case} label,
1220 like this:
1222 @example
1223 case @var{low} ... @var{high}:
1224 @end example
1226 @noindent
1227 This has the same effect as the proper number of individual @code{case}
1228 labels, one for each integer value from @var{low} to @var{high}, inclusive.
1230 This feature is especially useful for ranges of ASCII character codes:
1232 @example
1233 case 'A' ... 'Z':
1234 @end example
1236 @strong{Be careful:} Write spaces around the @code{...}, for otherwise
1237 it may be parsed wrong when you use it with integer values.  For example,
1238 write this:
1240 @example
1241 case 1 ... 5:
1242 @end example
1244 @noindent
1245 rather than this:
1247 @example
1248 case 1...5:
1249 @end example
1251 @node Cast to Union
1252 @section Cast to a Union Type
1253 @cindex cast to a union
1254 @cindex union, casting to a
1256 A cast to union type is similar to other casts, except that the type
1257 specified is a union type.  You can specify the type either with
1258 @code{union @var{tag}} or with a typedef name.  A cast to union is actually
1259 a constructor though, not a cast, and hence does not yield an lvalue like
1260 normal casts.  (@xref{Constructors}.)
1262 The types that may be cast to the union type are those of the members
1263 of the union.  Thus, given the following union and variables:
1265 @example
1266 union foo @{ int i; double d; @};
1267 int x;
1268 double y;
1269 @end example
1271 @noindent
1272 both @code{x} and @code{y} can be cast to type @code{union} foo.
1274 Using the cast as the right-hand side of an assignment to a variable of
1275 union type is equivalent to storing in a member of the union:
1277 @example
1278 union foo u;
1279 @dots{}
1280 u = (union foo) x  @equiv{}  u.i = x
1281 u = (union foo) y  @equiv{}  u.d = y
1282 @end example
1284 You can also use the union cast as a function argument:
1286 @example
1287 void hack (union foo);
1288 @dots{}
1289 hack ((union foo) x);
1290 @end example
1292 @node Function Attributes
1293 @section Declaring Attributes of Functions
1294 @cindex function attributes
1295 @cindex declaring attributes of functions
1296 @cindex functions that never return
1297 @cindex functions that have no side effects
1298 @cindex functions in arbitrary sections
1299 @cindex @code{volatile} applied to function
1300 @cindex @code{const} applied to function
1301 @cindex functions with @code{printf}, @code{scanf} or @code{strftime} style arguments
1302 @cindex functions that are passed arguments in registers on the 386
1303 @cindex functions that pop the argument stack on the 386
1304 @cindex functions that do not pop the argument stack on the 386
1306 In GNU C, you declare certain things about functions called in your program
1307 which help the compiler optimize function calls and check your code more
1308 carefully.
1310 The keyword @code{__attribute__} allows you to specify special
1311 attributes when making a declaration.  This keyword is followed by an
1312 attribute specification inside double parentheses.  Nine attributes,
1313 @code{noreturn}, @code{const}, @code{format},
1314 @code{no_instrument_function}, @code{section},
1315 @code{constructor}, @code{destructor}, @code{unused} and @code{weak} are
1316 currently defined for functions.  Other attributes, including
1317 @code{section} are supported for variables declarations (@pxref{Variable
1318 Attributes}) and for types (@pxref{Type Attributes}).
1320 You may also specify attributes with @samp{__} preceding and following
1321 each keyword.  This allows you to use them in header files without
1322 being concerned about a possible macro of the same name.  For example,
1323 you may use @code{__noreturn__} instead of @code{noreturn}.
1325 @table @code
1326 @cindex @code{noreturn} function attribute
1327 @item noreturn
1328 A few standard library functions, such as @code{abort} and @code{exit},
1329 cannot return.  GNU CC knows this automatically.  Some programs define
1330 their own functions that never return.  You can declare them
1331 @code{noreturn} to tell the compiler this fact.  For example,
1333 @smallexample
1334 void fatal () __attribute__ ((noreturn));
1336 void
1337 fatal (@dots{})
1339   @dots{} /* @r{Print error message.} */ @dots{}
1340   exit (1);
1342 @end smallexample
1344 The @code{noreturn} keyword tells the compiler to assume that
1345 @code{fatal} cannot return.  It can then optimize without regard to what
1346 would happen if @code{fatal} ever did return.  This makes slightly
1347 better code.  More importantly, it helps avoid spurious warnings of
1348 uninitialized variables.
1350 Do not assume that registers saved by the calling function are
1351 restored before calling the @code{noreturn} function.
1353 It does not make sense for a @code{noreturn} function to have a return
1354 type other than @code{void}.
1356 The attribute @code{noreturn} is not implemented in GNU C versions
1357 earlier than 2.5.  An alternative way to declare that a function does
1358 not return, which works in the current version and in some older
1359 versions, is as follows:
1361 @smallexample
1362 typedef void voidfn ();
1364 volatile voidfn fatal;
1365 @end smallexample
1367 @cindex @code{const} function attribute
1368 @item const
1369 Many functions do not examine any values except their arguments, and
1370 have no effects except the return value.  Such a function can be subject
1371 to common subexpression elimination and loop optimization just as an
1372 arithmetic operator would be.  These functions should be declared
1373 with the attribute @code{const}.  For example,
1375 @smallexample
1376 int square (int) __attribute__ ((const));
1377 @end smallexample
1379 @noindent
1380 says that the hypothetical function @code{square} is safe to call
1381 fewer times than the program says.
1383 The attribute @code{const} is not implemented in GNU C versions earlier
1384 than 2.5.  An alternative way to declare that a function has no side
1385 effects, which works in the current version and in some older versions,
1386 is as follows:
1388 @smallexample
1389 typedef int intfn ();
1391 extern const intfn square;
1392 @end smallexample
1394 This approach does not work in GNU C++ from 2.6.0 on, since the language
1395 specifies that the @samp{const} must be attached to the return value.
1397 @cindex pointer arguments
1398 Note that a function that has pointer arguments and examines the data
1399 pointed to must @emph{not} be declared @code{const}.  Likewise, a
1400 function that calls a non-@code{const} function usually must not be
1401 @code{const}.  It does not make sense for a @code{const} function to
1402 return @code{void}.
1404 @item format (@var{archetype}, @var{string-index}, @var{first-to-check})
1405 @cindex @code{format} function attribute
1406 The @code{format} attribute specifies that a function takes @code{printf},
1407 @code{scanf}, or @code{strftime} style arguments which should be type-checked
1408 against a format string.  For example, the declaration:
1410 @smallexample
1411 extern int
1412 my_printf (void *my_object, const char *my_format, ...)
1413       __attribute__ ((format (printf, 2, 3)));
1414 @end smallexample
1416 @noindent
1417 causes the compiler to check the arguments in calls to @code{my_printf}
1418 for consistency with the @code{printf} style format string argument
1419 @code{my_format}.
1421 The parameter @var{archetype} determines how the format string is
1422 interpreted, and should be either @code{printf}, @code{scanf}, or
1423 @code{strftime}.  The
1424 parameter @var{string-index} specifies which argument is the format
1425 string argument (starting from 1), while @var{first-to-check} is the
1426 number of the first argument to check against the format string.  For
1427 functions where the arguments are not available to be checked (such as
1428 @code{vprintf}), specify the third parameter as zero.  In this case the
1429 compiler only checks the format string for consistency.
1431 In the example above, the format string (@code{my_format}) is the second
1432 argument of the function @code{my_print}, and the arguments to check
1433 start with the third argument, so the correct parameters for the format
1434 attribute are 2 and 3.
1436 The @code{format} attribute allows you to identify your own functions
1437 which take format strings as arguments, so that GNU CC can check the
1438 calls to these functions for errors.  The compiler always checks formats
1439 for the ANSI library functions @code{printf}, @code{fprintf},
1440 @code{sprintf}, @code{scanf}, @code{fscanf}, @code{sscanf}, @code{strftime},
1441 @code{vprintf}, @code{vfprintf} and @code{vsprintf} whenever such
1442 warnings are requested (using @samp{-Wformat}), so there is no need to
1443 modify the header file @file{stdio.h}.
1445 @item format_arg (@var{string-index})
1446 @cindex @code{format_arg} function attribute
1447 The @code{format_arg} attribute specifies that a function takes
1448 @code{printf} or @code{scanf} style arguments, modifies it (for example,
1449 to translate it into another language), and passes it to a @code{printf}
1450 or @code{scanf} style function.  For example, the declaration:
1452 @smallexample
1453 extern char *
1454 my_dgettext (char *my_domain, const char *my_format)
1455       __attribute__ ((format_arg (2)));
1456 @end smallexample
1458 @noindent
1459 causes the compiler to check the arguments in calls to
1460 @code{my_dgettext} whose result is passed to a @code{printf},
1461 @code{scanf}, or @code{strftime} type function for consistency with the
1462 @code{printf} style format string argument @code{my_format}.
1464 The parameter @var{string-index} specifies which argument is the format
1465 string argument (starting from 1).
1467 The @code{format-arg} attribute allows you to identify your own
1468 functions which modify format strings, so that GNU CC can check the
1469 calls to @code{printf}, @code{scanf}, or @code{strftime} function whose
1470 operands are a call to one of your own function.  The compiler always
1471 treats @code{gettext}, @code{dgettext}, and @code{dcgettext} in this
1472 manner.
1474 @item no_instrument_function
1475 @cindex @code{no_instrument_function} function attribute
1476 If @samp{-finstrument-functions} is given, profiling function calls will
1477 be generated at entry and exit of most user-compiled functions.
1478 Functions with this attribute will not be so instrumented.
1480 @item section ("section-name")
1481 @cindex @code{section} function attribute
1482 Normally, the compiler places the code it generates in the @code{text} section.
1483 Sometimes, however, you need additional sections, or you need certain
1484 particular functions to appear in special sections.  The @code{section}
1485 attribute specifies that a function lives in a particular section.
1486 For example, the declaration:
1488 @smallexample
1489 extern void foobar (void) __attribute__ ((section ("bar")));
1490 @end smallexample
1492 @noindent
1493 puts the function @code{foobar} in the @code{bar} section.
1495 Some file formats do not support arbitrary sections so the @code{section}
1496 attribute is not available on all platforms.
1497 If you need to map the entire contents of a module to a particular
1498 section, consider using the facilities of the linker instead.
1500 @item constructor
1501 @itemx destructor
1502 @cindex @code{constructor} function attribute
1503 @cindex @code{destructor} function attribute
1504 The @code{constructor} attribute causes the function to be called
1505 automatically before execution enters @code{main ()}.  Similarly, the
1506 @code{destructor} attribute causes the function to be called
1507 automatically after @code{main ()} has completed or @code{exit ()} has
1508 been called.  Functions with these attributes are useful for
1509 initializing data that will be used implicitly during the execution of
1510 the program.
1512 These attributes are not currently implemented for Objective C.
1514 @item unused
1515 This attribute, attached to a function, means that the function is meant
1516 to be possibly unused.  GNU CC will not produce a warning for this
1517 function.  GNU C++ does not currently support this attribute as
1518 definitions without parameters are valid in C++.
1520 @item weak
1521 @cindex @code{weak} attribute
1522 The @code{weak} attribute causes the declaration to be emitted as a weak
1523 symbol rather than a global.  This is primarily useful in defining
1524 library functions which can be overridden in user code, though it can
1525 also be used with non-function declarations.  Weak symbols are supported
1526 for ELF targets, and also for a.out targets when using the GNU assembler
1527 and linker.
1529 @item alias ("target")
1530 @cindex @code{alias} attribute
1531 The @code{alias} attribute causes the declaration to be emitted as an
1532 alias for another symbol, which must be specified.  For instance,
1534 @smallexample
1535 void __f () @{ /* do something */; @}
1536 void f () __attribute__ ((weak, alias ("__f")));
1537 @end smallexample
1539 declares @samp{f} to be a weak alias for @samp{__f}.  In C++, the
1540 mangled name for the target must be used.
1542 Not all target machines support this attribute.
1544 @item no_check_memory_usage
1545 @cindex @code{no_check_memory_usage} function attribute
1546 If @samp{-fcheck-memory-usage} is given, calls to support routines will
1547 be generated before most memory accesses, to permit support code to
1548 record usage and detect uses of uninitialized or unallocated storage.
1549 Since the compiler cannot handle them properly, @code{asm} statements
1550 are not allowed.  Declaring a function with this attribute disables the
1551 memory checking code for that function, permitting the use of @code{asm}
1552 statements without requiring separate compilation with different
1553 options, and allowing you to write support routines of your own if you
1554 wish, without getting infinite recursion if they get compiled with this
1555 option.
1557 @item regparm (@var{number})
1558 @cindex functions that are passed arguments in registers on the 386
1559 On the Intel 386, the @code{regparm} attribute causes the compiler to
1560 pass up to @var{number} integer arguments in registers @var{EAX},
1561 @var{EDX}, and @var{ECX} instead of on the stack.  Functions that take a
1562 variable number of arguments will continue to be passed all of their
1563 arguments on the stack.
1565 @item stdcall
1566 @cindex functions that pop the argument stack on the 386
1567 On the Intel 386, the @code{stdcall} attribute causes the compiler to
1568 assume that the called function will pop off the stack space used to
1569 pass arguments, unless it takes a variable number of arguments.
1571 The PowerPC compiler for Windows NT currently ignores the @code{stdcall}
1572 attribute.
1574 @item cdecl
1575 @cindex functions that do pop the argument stack on the 386
1576 On the Intel 386, the @code{cdecl} attribute causes the compiler to
1577 assume that the calling function will pop off the stack space used to
1578 pass arguments.  This is
1579 useful to override the effects of the @samp{-mrtd} switch.
1581 The PowerPC compiler for Windows NT currently ignores the @code{cdecl}
1582 attribute.
1584 @item longcall
1585 @cindex functions called via pointer on the RS/6000 and PowerPC
1586 On the RS/6000 and PowerPC, the @code{longcall} attribute causes the
1587 compiler to always call the function via a pointer, so that functions
1588 which reside further than 64 megabytes (67,108,864 bytes) from the
1589 current location can be called.
1591 @item dllimport
1592 @cindex functions which are imported from a dll on PowerPC Windows NT
1593 On the PowerPC running Windows NT, the @code{dllimport} attribute causes
1594 the compiler to call the function via a global pointer to the function
1595 pointer that is set up by the Windows NT dll library.  The pointer name
1596 is formed by combining @code{__imp_} and the function name.
1598 @item dllexport
1599 @cindex functions which are exported from a dll on PowerPC Windows NT
1600 On the PowerPC running Windows NT, the @code{dllexport} attribute causes
1601 the compiler to provide a global pointer to the function pointer, so
1602 that it can be called with the @code{dllimport} attribute.  The pointer
1603 name is formed by combining @code{__imp_} and the function name.
1605 @item exception (@var{except-func} [, @var{except-arg}])
1606 @cindex functions which specify exception handling on PowerPC Windows NT
1607 On the PowerPC running Windows NT, the @code{exception} attribute causes
1608 the compiler to modify the structured exception table entry it emits for
1609 the declared function.  The string or identifier @var{except-func} is
1610 placed in the third entry of the structured exception table.  It
1611 represents a function, which is called by the exception handling
1612 mechanism if an exception occurs.  If it was specified, the string or
1613 identifier @var{except-arg} is placed in the fourth entry of the
1614 structured exception table.
1616 @item function_vector
1617 @cindex calling functions through the function vector on the H8/300 processors
1618 Use this option on the H8/300 and H8/300H to indicate that the specified
1619 function should be called through the function vector.  Calling a
1620 function through the function vector will reduce code size, however;
1621 the function vector has a limited size (maximum 128 entries on the H8/300
1622 and 64 entries on the H8/300H) and shares space with the interrupt vector.
1624 You must use GAS and GLD from GNU binutils version 2.7 or later for
1625 this option to work correctly.
1627 @item interrupt_handler
1628 @cindex interrupt handler functions on the H8/300 processors
1629 Use this option on the H8/300 and H8/300H to indicate that the specified
1630 function is an interrupt handler.  The compiler will generate function
1631 entry and exit sequences suitable for use in an interrupt handler when this
1632 attribute is present.
1634 @item eightbit_data
1635 @cindex eight bit data on the H8/300 and H8/300H
1636 Use this option on the H8/300 and H8/300H to indicate that the specified
1637 variable should be placed into the eight bit data section.
1638 The compiler will generate more efficient code for certain operations
1639 on data in the eight bit data area.  Note the eight bit data area is limited to
1640 256 bytes of data.
1642 You must use GAS and GLD from GNU binutils version 2.7 or later for
1643 this option to work correctly.
1645 @item tiny_data
1646 @cindex tiny data section on the H8/300H
1647 Use this option on the H8/300H to indicate that the specified
1648 variable should be placed into the tiny data section.
1649 The compiler will generate more efficient code for loads and stores
1650 on data in the tiny data section.  Note the tiny data area is limited to
1651 slightly under 32kbytes of data.
1653 @item interrupt
1654 @cindex interrupt handlers on the M32R/D
1655 Use this option on the M32R/D to indicate that the specified
1656 function is an interrupt handler.  The compiler will generate function
1657 entry and exit sequences suitable for use in an interrupt handler when this
1658 attribute is present.
1660 @item model (@var{model-name})
1661 @cindex function addressability on the M32R/D
1662 Use this attribute on the M32R/D to set the addressability of an object,
1663 and the code generated for a function.
1664 The identifier @var{model-name} is one of @code{small}, @code{medium},
1665 or @code{large}, representing each of the code models.
1667 Small model objects live in the lower 16MB of memory (so that their
1668 addresses can be loaded with the @code{ld24} instruction), and are
1669 callable with the @code{bl} instruction.
1671 Medium model objects may live anywhere in the 32 bit address space (the
1672 compiler will generate @code{seth/add3} instructions to load their addresses),
1673 and are callable with the @code{bl} instruction.
1675 Large model objects may live anywhere in the 32 bit address space (the
1676 compiler will generate @code{seth/add3} instructions to load their addresses),
1677 and may not be reachable with the @code{bl} instruction (the compiler will
1678 generate the much slower @code{seth/add3/jl} instruction sequence).
1680 @end table
1682 You can specify multiple attributes in a declaration by separating them
1683 by commas within the double parentheses or by immediately following an
1684 attribute declaration with another attribute declaration.
1686 @cindex @code{#pragma}, reason for not using
1687 @cindex pragma, reason for not using
1688 Some people object to the @code{__attribute__} feature, suggesting that ANSI C's
1689 @code{#pragma} should be used instead.  There are two reasons for not
1690 doing this.
1692 @enumerate
1693 @item
1694 It is impossible to generate @code{#pragma} commands from a macro.
1696 @item
1697 There is no telling what the same @code{#pragma} might mean in another
1698 compiler.
1699 @end enumerate
1701 These two reasons apply to almost any application that might be proposed
1702 for @code{#pragma}.  It is basically a mistake to use @code{#pragma} for
1703 @emph{anything}.
1705 @node Function Prototypes
1706 @section Prototypes and Old-Style Function Definitions
1707 @cindex function prototype declarations
1708 @cindex old-style function definitions
1709 @cindex promotion of formal parameters
1711 GNU C extends ANSI C to allow a function prototype to override a later
1712 old-style non-prototype definition.  Consider the following example:
1714 @example
1715 /* @r{Use prototypes unless the compiler is old-fashioned.}  */
1716 #ifdef __STDC__
1717 #define P(x) x
1718 #else
1719 #define P(x) ()
1720 #endif
1722 /* @r{Prototype function declaration.}  */
1723 int isroot P((uid_t));
1725 /* @r{Old-style function definition.}  */
1727 isroot (x)   /* ??? lossage here ??? */
1728      uid_t x;
1730   return x == 0;
1732 @end example
1734 Suppose the type @code{uid_t} happens to be @code{short}.  ANSI C does
1735 not allow this example, because subword arguments in old-style
1736 non-prototype definitions are promoted.  Therefore in this example the
1737 function definition's argument is really an @code{int}, which does not
1738 match the prototype argument type of @code{short}.
1740 This restriction of ANSI C makes it hard to write code that is portable
1741 to traditional C compilers, because the programmer does not know
1742 whether the @code{uid_t} type is @code{short}, @code{int}, or
1743 @code{long}.  Therefore, in cases like these GNU C allows a prototype
1744 to override a later old-style definition.  More precisely, in GNU C, a
1745 function prototype argument type overrides the argument type specified
1746 by a later old-style definition if the former type is the same as the
1747 latter type before promotion.  Thus in GNU C the above example is
1748 equivalent to the following:
1750 @example
1751 int isroot (uid_t);
1754 isroot (uid_t x)
1756   return x == 0;
1758 @end example
1760 GNU C++ does not support old-style function definitions, so this
1761 extension is irrelevant.
1763 @node C++ Comments
1764 @section C++ Style Comments
1765 @cindex //
1766 @cindex C++ comments
1767 @cindex comments, C++ style
1769 In GNU C, you may use C++ style comments, which start with @samp{//} and
1770 continue until the end of the line.  Many other C implementations allow
1771 such comments, and they are likely to be in a future C standard.
1772 However, C++ style comments are not recognized if you specify
1773 @w{@samp{-ansi}} or @w{@samp{-traditional}}, since they are incompatible
1774 with traditional constructs like @code{dividend//*comment*/divisor}.
1776 @node Dollar Signs
1777 @section Dollar Signs in Identifier Names
1778 @cindex $
1779 @cindex dollar signs in identifier names
1780 @cindex identifier names, dollar signs in
1782 In GNU C, you may normally use dollar signs in identifier names.
1783 This is because many traditional C implementations allow such identifiers.
1784 However, dollar signs in identifiers are not supported on a few target
1785 machines, typically because the target assembler does not allow them.
1787 @node Character Escapes
1788 @section The Character @key{ESC} in Constants
1790 You can use the sequence @samp{\e} in a string or character constant to
1791 stand for the ASCII character @key{ESC}.
1793 @node Alignment
1794 @section Inquiring on Alignment of Types or Variables
1795 @cindex alignment
1796 @cindex type alignment
1797 @cindex variable alignment
1799 The keyword @code{__alignof__} allows you to inquire about how an object
1800 is aligned, or the minimum alignment usually required by a type.  Its
1801 syntax is just like @code{sizeof}.
1803 For example, if the target machine requires a @code{double} value to be
1804 aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
1805 This is true on many RISC machines.  On more traditional machine
1806 designs, @code{__alignof__ (double)} is 4 or even 2.
1808 Some machines never actually require alignment; they allow reference to any
1809 data type even at an odd addresses.  For these machines, @code{__alignof__}
1810 reports the @emph{recommended} alignment of a type.
1812 When the operand of @code{__alignof__} is an lvalue rather than a type, the
1813 value is the largest alignment that the lvalue is known to have.  It may
1814 have this alignment as a result of its data type, or because it is part of
1815 a structure and inherits alignment from that structure.  For example, after
1816 this declaration:
1818 @example
1819 struct foo @{ int x; char y; @} foo1;
1820 @end example
1822 @noindent
1823 the value of @code{__alignof__ (foo1.y)} is probably 2 or 4, the same as
1824 @code{__alignof__ (int)}, even though the data type of @code{foo1.y}
1825 does not itself demand any alignment.@refill
1827 A related feature which lets you specify the alignment of an object is
1828 @code{__attribute__ ((aligned (@var{alignment})))}; see the following
1829 section.
1831 @node Variable Attributes
1832 @section Specifying Attributes of Variables
1833 @cindex attribute of variables
1834 @cindex variable attributes
1836 The keyword @code{__attribute__} allows you to specify special
1837 attributes of variables or structure fields.  This keyword is followed
1838 by an attribute specification inside double parentheses.  Eight
1839 attributes are currently defined for variables: @code{aligned},
1840 @code{mode}, @code{nocommon}, @code{packed}, @code{section},
1841 @code{transparent_union}, @code{unused}, and @code{weak}.  Other
1842 attributes are available for functions (@pxref{Function Attributes}) and
1843 for types (@pxref{Type Attributes}).
1845 You may also specify attributes with @samp{__} preceding and following
1846 each keyword.  This allows you to use them in header files without
1847 being concerned about a possible macro of the same name.  For example,
1848 you may use @code{__aligned__} instead of @code{aligned}.
1850 @table @code
1851 @cindex @code{aligned} attribute
1852 @item aligned (@var{alignment})
1853 This attribute specifies a minimum alignment for the variable or
1854 structure field, measured in bytes.  For example, the declaration:
1856 @smallexample
1857 int x __attribute__ ((aligned (16))) = 0;
1858 @end smallexample
1860 @noindent
1861 causes the compiler to allocate the global variable @code{x} on a
1862 16-byte boundary.  On a 68040, this could be used in conjunction with
1863 an @code{asm} expression to access the @code{move16} instruction which
1864 requires 16-byte aligned operands.
1866 You can also specify the alignment of structure fields.  For example, to
1867 create a double-word aligned @code{int} pair, you could write:
1869 @smallexample
1870 struct foo @{ int x[2] __attribute__ ((aligned (8))); @};
1871 @end smallexample
1873 @noindent
1874 This is an alternative to creating a union with a @code{double} member
1875 that forces the union to be double-word aligned.
1877 It is not possible to specify the alignment of functions; the alignment
1878 of functions is determined by the machine's requirements and cannot be
1879 changed.  You cannot specify alignment for a typedef name because such a
1880 name is just an alias, not a distinct type.
1882 As in the preceding examples, you can explicitly specify the alignment
1883 (in bytes) that you wish the compiler to use for a given variable or
1884 structure field.  Alternatively, you can leave out the alignment factor
1885 and just ask the compiler to align a variable or field to the maximum
1886 useful alignment for the target machine you are compiling for.  For
1887 example, you could write:
1889 @smallexample
1890 short array[3] __attribute__ ((aligned));
1891 @end smallexample
1893 Whenever you leave out the alignment factor in an @code{aligned} attribute
1894 specification, the compiler automatically sets the alignment for the declared
1895 variable or field to the largest alignment which is ever used for any data
1896 type on the target machine you are compiling for.  Doing this can often make
1897 copy operations more efficient, because the compiler can use whatever
1898 instructions copy the biggest chunks of memory when performing copies to
1899 or from the variables or fields that you have aligned this way.
1901 The @code{aligned} attribute can only increase the alignment; but you
1902 can decrease it by specifying @code{packed} as well.  See below.
1904 Note that the effectiveness of @code{aligned} attributes may be limited
1905 by inherent limitations in your linker.  On many systems, the linker is
1906 only able to arrange for variables to be aligned up to a certain maximum
1907 alignment.  (For some linkers, the maximum supported alignment may
1908 be very very small.)  If your linker is only able to align variables
1909 up to a maximum of 8 byte alignment, then specifying @code{aligned(16)}
1910 in an @code{__attribute__} will still only provide you with 8 byte
1911 alignment.  See your linker documentation for further information.
1913 @item mode (@var{mode})
1914 @cindex @code{mode} attribute
1915 This attribute specifies the data type for the declaration---whichever
1916 type corresponds to the mode @var{mode}.  This in effect lets you
1917 request an integer or floating point type according to its width.
1919 You may also specify a mode of @samp{byte} or @samp{__byte__} to
1920 indicate the mode corresponding to a one-byte integer, @samp{word} or
1921 @samp{__word__} for the mode of a one-word integer, and @samp{pointer}
1922 or @samp{__pointer__} for the mode used to represent pointers.
1924 @item nocommon
1925 @cindex @code{nocommon} attribute
1926 This attribute specifies requests GNU CC not to place a variable
1927 ``common'' but instead to allocate space for it directly.  If you
1928 specify the @samp{-fno-common} flag, GNU CC will do this for all
1929 variables.
1931 Specifying the @code{nocommon} attribute for a variable provides an
1932 initialization of zeros.  A variable may only be initialized in one
1933 source file.
1935 @item packed
1936 @cindex @code{packed} attribute
1937 The @code{packed} attribute specifies that a variable or structure field
1938 should have the smallest possible alignment---one byte for a variable,
1939 and one bit for a field, unless you specify a larger value with the
1940 @code{aligned} attribute.
1942 Here is a structure in which the field @code{x} is packed, so that it
1943 immediately follows @code{a}:
1945 @example
1946 struct foo
1948   char a;
1949   int x[2] __attribute__ ((packed));
1951 @end example
1953 @item section ("section-name")
1954 @cindex @code{section} variable attribute
1955 Normally, the compiler places the objects it generates in sections like
1956 @code{data} and @code{bss}.  Sometimes, however, you need additional sections,
1957 or you need certain particular variables to appear in special sections,
1958 for example to map to special hardware.  The @code{section}
1959 attribute specifies that a variable (or function) lives in a particular
1960 section.  For example, this small program uses several specific section names:
1962 @smallexample
1963 struct duart a __attribute__ ((section ("DUART_A"))) = @{ 0 @};
1964 struct duart b __attribute__ ((section ("DUART_B"))) = @{ 0 @};
1965 char stack[10000] __attribute__ ((section ("STACK"))) = @{ 0 @};
1966 int init_data __attribute__ ((section ("INITDATA"))) = 0;
1968 main()
1970   /* Initialize stack pointer */
1971   init_sp (stack + sizeof (stack));
1973   /* Initialize initialized data */
1974   memcpy (&init_data, &data, &edata - &data);
1976   /* Turn on the serial ports */
1977   init_duart (&a);
1978   init_duart (&b);
1980 @end smallexample
1982 @noindent
1983 Use the @code{section} attribute with an @emph{initialized} definition
1984 of a @emph{global} variable, as shown in the example.  GNU CC issues
1985 a warning and otherwise ignores the @code{section} attribute in
1986 uninitialized variable declarations.
1988 You may only use the @code{section} attribute with a fully initialized
1989 global definition because of the way linkers work.  The linker requires
1990 each object be defined once, with the exception that uninitialized
1991 variables tentatively go in the @code{common} (or @code{bss}) section
1992 and can be multiply "defined".  You can force a variable to be
1993 initialized with the @samp{-fno-common} flag or the @code{nocommon}
1994 attribute.
1996 Some file formats do not support arbitrary sections so the @code{section}
1997 attribute is not available on all platforms.
1998 If you need to map the entire contents of a module to a particular
1999 section, consider using the facilities of the linker instead.
2001 @item transparent_union
2002 This attribute, attached to a function parameter which is a union, means
2003 that the corresponding argument may have the type of any union member,
2004 but the argument is passed as if its type were that of the first union
2005 member.  For more details see @xref{Type Attributes}.  You can also use
2006 this attribute on a @code{typedef} for a union data type; then it
2007 applies to all function parameters with that type.
2009 @item unused
2010 This attribute, attached to a variable, means that the variable is meant
2011 to be possibly unused.  GNU CC will not produce a warning for this
2012 variable.
2014 @item weak
2015 The @code{weak} attribute is described in @xref{Function Attributes}.
2017 @item model (@var{model-name})
2018 @cindex variable addressability on the M32R/D
2019 Use this attribute on the M32R/D to set the addressability of an object.
2020 The identifier @var{model-name} is one of @code{small}, @code{medium},
2021 or @code{large}, representing each of the code models.
2023 Small model objects live in the lower 16MB of memory (so that their
2024 addresses can be loaded with the @code{ld24} instruction).
2026 Medium and large model objects may live anywhere in the 32 bit address space
2027 (the compiler will generate @code{seth/add3} instructions to load their
2028 addresses).
2030 @end table
2032 To specify multiple attributes, separate them by commas within the
2033 double parentheses: for example, @samp{__attribute__ ((aligned (16),
2034 packed))}.
2036 @node Type Attributes
2037 @section Specifying Attributes of Types
2038 @cindex attribute of types
2039 @cindex type attributes
2041 The keyword @code{__attribute__} allows you to specify special
2042 attributes of @code{struct} and @code{union} types when you define such
2043 types.  This keyword is followed by an attribute specification inside
2044 double parentheses.  Three attributes are currently defined for types:
2045 @code{aligned}, @code{packed}, and @code{transparent_union}.  Other
2046 attributes are defined for functions (@pxref{Function Attributes}) and
2047 for variables (@pxref{Variable Attributes}).
2049 You may also specify any one of these attributes with @samp{__}
2050 preceding and following its keyword.  This allows you to use these
2051 attributes in header files without being concerned about a possible
2052 macro of the same name.  For example, you may use @code{__aligned__}
2053 instead of @code{aligned}.
2055 You may specify the @code{aligned} and @code{transparent_union}
2056 attributes either in a @code{typedef} declaration or just past the
2057 closing curly brace of a complete enum, struct or union type
2058 @emph{definition} and the @code{packed} attribute only past the closing
2059 brace of a definition.
2061 You may also specify attributes between the enum, struct or union
2062 tag and the name of the type rather than after the closing brace.
2064 @table @code
2065 @cindex @code{aligned} attribute
2066 @item aligned (@var{alignment})
2067 This attribute specifies a minimum alignment (in bytes) for variables
2068 of the specified type.  For example, the declarations:
2070 @smallexample
2071 struct S @{ short f[3]; @} __attribute__ ((aligned (8)));
2072 typedef int more_aligned_int __attribute__ ((aligned (8)));
2073 @end smallexample
2075 @noindent
2076 force the compiler to insure (as far as it can) that each variable whose
2077 type is @code{struct S} or @code{more_aligned_int} will be allocated and
2078 aligned @emph{at least} on a 8-byte boundary.  On a Sparc, having all
2079 variables of type @code{struct S} aligned to 8-byte boundaries allows
2080 the compiler to use the @code{ldd} and @code{std} (doubleword load and
2081 store) instructions when copying one variable of type @code{struct S} to
2082 another, thus improving run-time efficiency.
2084 Note that the alignment of any given @code{struct} or @code{union} type
2085 is required by the ANSI C standard to be at least a perfect multiple of
2086 the lowest common multiple of the alignments of all of the members of
2087 the @code{struct} or @code{union} in question.  This means that you @emph{can}
2088 effectively adjust the alignment of a @code{struct} or @code{union}
2089 type by attaching an @code{aligned} attribute to any one of the members
2090 of such a type, but the notation illustrated in the example above is a
2091 more obvious, intuitive, and readable way to request the compiler to
2092 adjust the alignment of an entire @code{struct} or @code{union} type.
2094 As in the preceding example, you can explicitly specify the alignment
2095 (in bytes) that you wish the compiler to use for a given @code{struct}
2096 or @code{union} type.  Alternatively, you can leave out the alignment factor
2097 and just ask the compiler to align a type to the maximum
2098 useful alignment for the target machine you are compiling for.  For
2099 example, you could write:
2101 @smallexample
2102 struct S @{ short f[3]; @} __attribute__ ((aligned));
2103 @end smallexample
2105 Whenever you leave out the alignment factor in an @code{aligned}
2106 attribute specification, the compiler automatically sets the alignment
2107 for the type to the largest alignment which is ever used for any data
2108 type on the target machine you are compiling for.  Doing this can often
2109 make copy operations more efficient, because the compiler can use
2110 whatever instructions copy the biggest chunks of memory when performing
2111 copies to or from the variables which have types that you have aligned
2112 this way.
2114 In the example above, if the size of each @code{short} is 2 bytes, then
2115 the size of the entire @code{struct S} type is 6 bytes.  The smallest
2116 power of two which is greater than or equal to that is 8, so the
2117 compiler sets the alignment for the entire @code{struct S} type to 8
2118 bytes.
2120 Note that although you can ask the compiler to select a time-efficient
2121 alignment for a given type and then declare only individual stand-alone
2122 objects of that type, the compiler's ability to select a time-efficient
2123 alignment is primarily useful only when you plan to create arrays of
2124 variables having the relevant (efficiently aligned) type.  If you
2125 declare or use arrays of variables of an efficiently-aligned type, then
2126 it is likely that your program will also be doing pointer arithmetic (or
2127 subscripting, which amounts to the same thing) on pointers to the
2128 relevant type, and the code that the compiler generates for these
2129 pointer arithmetic operations will often be more efficient for
2130 efficiently-aligned types than for other types.
2132 The @code{aligned} attribute can only increase the alignment; but you
2133 can decrease it by specifying @code{packed} as well.  See below.
2135 Note that the effectiveness of @code{aligned} attributes may be limited
2136 by inherent limitations in your linker.  On many systems, the linker is
2137 only able to arrange for variables to be aligned up to a certain maximum
2138 alignment.  (For some linkers, the maximum supported alignment may
2139 be very very small.)  If your linker is only able to align variables
2140 up to a maximum of 8 byte alignment, then specifying @code{aligned(16)}
2141 in an @code{__attribute__} will still only provide you with 8 byte
2142 alignment.  See your linker documentation for further information.
2144 @item packed
2145 This attribute, attached to an @code{enum}, @code{struct}, or
2146 @code{union} type definition, specified that the minimum required memory
2147 be used to represent the type.
2149 Specifying this attribute for @code{struct} and @code{union} types is
2150 equivalent to specifying the @code{packed} attribute on each of the
2151 structure or union members.  Specifying the @samp{-fshort-enums}
2152 flag on the line is equivalent to specifying the @code{packed}
2153 attribute on all @code{enum} definitions.
2155 You may only specify this attribute after a closing curly brace on an
2156 @code{enum} definition, not in a @code{typedef} declaration, unless that
2157 declaration also contains the definition of the @code{enum}.
2159 @item transparent_union
2160 This attribute, attached to a @code{union} type definition, indicates
2161 that any function parameter having that union type causes calls to that
2162 function to be treated in a special way.
2164 First, the argument corresponding to a transparent union type can be of
2165 any type in the union; no cast is required.  Also, if the union contains
2166 a pointer type, the corresponding argument can be a null pointer
2167 constant or a void pointer expression; and if the union contains a void
2168 pointer type, the corresponding argument can be any pointer expression.
2169 If the union member type is a pointer, qualifiers like @code{const} on
2170 the referenced type must be respected, just as with normal pointer
2171 conversions.
2173 Second, the argument is passed to the function using the calling
2174 conventions of first member of the transparent union, not the calling
2175 conventions of the union itself.  All members of the union must have the
2176 same machine representation; this is necessary for this argument passing
2177 to work properly.
2179 Transparent unions are designed for library functions that have multiple
2180 interfaces for compatibility reasons.  For example, suppose the
2181 @code{wait} function must accept either a value of type @code{int *} to
2182 comply with Posix, or a value of type @code{union wait *} to comply with
2183 the 4.1BSD interface.  If @code{wait}'s parameter were @code{void *},
2184 @code{wait} would accept both kinds of arguments, but it would also
2185 accept any other pointer type and this would make argument type checking
2186 less useful.  Instead, @code{<sys/wait.h>} might define the interface
2187 as follows:
2189 @smallexample
2190 typedef union
2191   @{
2192     int *__ip;
2193     union wait *__up;
2194   @} wait_status_ptr_t __attribute__ ((__transparent_union__));
2196 pid_t wait (wait_status_ptr_t);
2197 @end smallexample
2199 This interface allows either @code{int *} or @code{union wait *}
2200 arguments to be passed, using the @code{int *} calling convention.
2201 The program can call @code{wait} with arguments of either type:
2203 @example
2204 int w1 () @{ int w; return wait (&w); @}
2205 int w2 () @{ union wait w; return wait (&w); @}
2206 @end example
2208 With this interface, @code{wait}'s implementation might look like this:
2210 @example
2211 pid_t wait (wait_status_ptr_t p)
2213   return waitpid (-1, p.__ip, 0);
2215 @end example
2217 @item unused
2218 When attached to a type (including a @code{union} or a @code{struct}),
2219 this attribute means that variables of that type are meant to appear
2220 possibly unused.  GNU CC will not produce a warning for any variables of
2221 that type, even if the variable appears to do nothing.  This is often
2222 the case with lock or thread classes, which are usually defined and then
2223 not referenced, but contain constructors and destructors that have
2224 nontrivial bookkeeping functions.
2226 @end table
2228 To specify multiple attributes, separate them by commas within the
2229 double parentheses: for example, @samp{__attribute__ ((aligned (16),
2230 packed))}.
2232 @node Inline
2233 @section An Inline Function is As Fast As a Macro
2234 @cindex inline functions
2235 @cindex integrating function code
2236 @cindex open coding
2237 @cindex macros, inline alternative
2239 By declaring a function @code{inline}, you can direct GNU CC to
2240 integrate that function's code into the code for its callers.  This
2241 makes execution faster by eliminating the function-call overhead; in
2242 addition, if any of the actual argument values are constant, their known
2243 values may permit simplifications at compile time so that not all of the
2244 inline function's code needs to be included.  The effect on code size is
2245 less predictable; object code may be larger or smaller with function
2246 inlining, depending on the particular case.  Inlining of functions is an
2247 optimization and it really ``works'' only in optimizing compilation.  If
2248 you don't use @samp{-O}, no function is really inline.
2250 To declare a function inline, use the @code{inline} keyword in its
2251 declaration, like this:
2253 @example
2254 inline int
2255 inc (int *a)
2257   (*a)++;
2259 @end example
2261 (If you are writing a header file to be included in ANSI C programs, write
2262 @code{__inline__} instead of @code{inline}.  @xref{Alternate Keywords}.)
2263 You can also make all ``simple enough'' functions inline with the option
2264 @samp{-finline-functions}. 
2266 Note that certain usages in a function definition can make it unsuitable
2267 for inline substitution.  Among these usages are: use of varargs, use of
2268 alloca, use of variable sized data types (@pxref{Variable Length}),
2269 use of computed goto (@pxref{Labels as Values}), use of nonlocal goto,
2270 and nested functions (@pxref{Nested Functions}).  Using @samp{-Winline}
2271 will warn when a function marked @code{inline} could not be substituted,
2272 and will give the reason for the failure.
2274 Note that in C and Objective C, unlike C++, the @code{inline} keyword
2275 does not affect the linkage of the function.
2277 @cindex automatic @code{inline} for C++ member fns
2278 @cindex @code{inline} automatic for C++ member fns
2279 @cindex member fns, automatically @code{inline}
2280 @cindex C++ member fns, automatically @code{inline}
2281 GNU CC automatically inlines member functions defined within the class
2282 body of C++ programs even if they are not explicitly declared
2283 @code{inline}.  (You can override this with @samp{-fno-default-inline};
2284 @pxref{C++ Dialect Options,,Options Controlling C++ Dialect}.)
2286 @cindex inline functions, omission of
2287 When a function is both inline and @code{static}, if all calls to the
2288 function are integrated into the caller, and the function's address is
2289 never used, then the function's own assembler code is never referenced.
2290 In this case, GNU CC does not actually output assembler code for the
2291 function, unless you specify the option @samp{-fkeep-inline-functions}.
2292 Some calls cannot be integrated for various reasons (in particular,
2293 calls that precede the function's definition cannot be integrated, and
2294 neither can recursive calls within the definition).  If there is a
2295 nonintegrated call, then the function is compiled to assembler code as
2296 usual.  The function must also be compiled as usual if the program
2297 refers to its address, because that can't be inlined.
2299 @cindex non-static inline function
2300 When an inline function is not @code{static}, then the compiler must assume
2301 that there may be calls from other source files; since a global symbol can
2302 be defined only once in any program, the function must not be defined in
2303 the other source files, so the calls therein cannot be integrated.
2304 Therefore, a non-@code{static} inline function is always compiled on its
2305 own in the usual fashion.
2307 If you specify both @code{inline} and @code{extern} in the function
2308 definition, then the definition is used only for inlining.  In no case
2309 is the function compiled on its own, not even if you refer to its
2310 address explicitly.  Such an address becomes an external reference, as
2311 if you had only declared the function, and had not defined it.
2313 This combination of @code{inline} and @code{extern} has almost the
2314 effect of a macro.  The way to use it is to put a function definition in
2315 a header file with these keywords, and put another copy of the
2316 definition (lacking @code{inline} and @code{extern}) in a library file.
2317 The definition in the header file will cause most calls to the function
2318 to be inlined.  If any uses of the function remain, they will refer to
2319 the single copy in the library.
2321 GNU C does not inline any functions when not optimizing.  It is not
2322 clear whether it is better to inline or not, in this case, but we found
2323 that a correct implementation when not optimizing was difficult.  So we
2324 did the easy thing, and turned it off.
2326 @node Extended Asm
2327 @section Assembler Instructions with C Expression Operands
2328 @cindex extended @code{asm}
2329 @cindex @code{asm} expressions
2330 @cindex assembler instructions
2331 @cindex registers
2333 In an assembler instruction using @code{asm}, you can specify the
2334 operands of the instruction using C expressions.  This means you need not
2335 guess which registers or memory locations will contain the data you want
2336 to use.
2338 You must specify an assembler instruction template much like what
2339 appears in a machine description, plus an operand constraint string for
2340 each operand.
2342 For example, here is how to use the 68881's @code{fsinx} instruction:
2344 @example
2345 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
2346 @end example
2348 @noindent
2349 Here @code{angle} is the C expression for the input operand while
2350 @code{result} is that of the output operand.  Each has @samp{"f"} as its
2351 operand constraint, saying that a floating point register is required.
2352 The @samp{=} in @samp{=f} indicates that the operand is an output; all
2353 output operands' constraints must use @samp{=}.  The constraints use the
2354 same language used in the machine description (@pxref{Constraints}).
2356 Each operand is described by an operand-constraint string followed by
2357 the C expression in parentheses.  A colon separates the assembler
2358 template from the first output operand and another separates the last
2359 output operand from the first input, if any.  Commas separate the
2360 operands within each group.  The total number of operands is limited to
2361 ten or to the maximum number of operands in any instruction pattern in
2362 the machine description, whichever is greater.
2364 If there are no output operands but there are input operands, you must
2365 place two consecutive colons surrounding the place where the output
2366 operands would go.
2368 Output operand expressions must be lvalues; the compiler can check this.
2369 The input operands need not be lvalues.  The compiler cannot check
2370 whether the operands have data types that are reasonable for the
2371 instruction being executed.  It does not parse the assembler instruction
2372 template and does not know what it means or even whether it is valid
2373 assembler input.  The extended @code{asm} feature is most often used for
2374 machine instructions the compiler itself does not know exist.  If
2375 the output expression cannot be directly addressed (for example, it is a
2376 bit field), your constraint must allow a register.  In that case, GNU CC
2377 will use the register as the output of the @code{asm}, and then store
2378 that register into the output.
2380 The ordinary output operands must be write-only; GNU CC will assume that
2381 the values in these operands before the instruction are dead and need
2382 not be generated.  Extended asm supports input-output or read-write
2383 operands.  Use the constraint character @samp{+} to indicate such an
2384 operand and list it with the output operands.
2386 When the constraints for the read-write operand (or the operand in which
2387 only some of the bits are to be changed) allows a register, you may, as
2388 an alternative, logically split its function into two separate operands,
2389 one input operand and one write-only output operand.  The connection
2390 between them is expressed by constraints which say they need to be in
2391 the same location when the instruction executes.  You can use the same C
2392 expression for both operands, or different expressions.  For example,
2393 here we write the (fictitious) @samp{combine} instruction with
2394 @code{bar} as its read-only source operand and @code{foo} as its
2395 read-write destination:
2397 @example
2398 asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
2399 @end example
2401 @noindent
2402 The constraint @samp{"0"} for operand 1 says that it must occupy the
2403 same location as operand 0.  A digit in constraint is allowed only in an
2404 input operand and it must refer to an output operand.
2406 Only a digit in the constraint can guarantee that one operand will be in
2407 the same place as another.  The mere fact that @code{foo} is the value
2408 of both operands is not enough to guarantee that they will be in the
2409 same place in the generated assembler code.  The following would not
2410 work reliably:
2412 @example
2413 asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
2414 @end example
2416 Various optimizations or reloading could cause operands 0 and 1 to be in
2417 different registers; GNU CC knows no reason not to do so.  For example, the
2418 compiler might find a copy of the value of @code{foo} in one register and
2419 use it for operand 1, but generate the output operand 0 in a different
2420 register (copying it afterward to @code{foo}'s own address).  Of course,
2421 since the register for operand 1 is not even mentioned in the assembler
2422 code, the result will not work, but GNU CC can't tell that.
2424 Some instructions clobber specific hard registers.  To describe this,
2425 write a third colon after the input operands, followed by the names of
2426 the clobbered hard registers (given as strings).  Here is a realistic
2427 example for the VAX:
2429 @example
2430 asm volatile ("movc3 %0,%1,%2"
2431               : /* no outputs */
2432               : "g" (from), "g" (to), "g" (count)
2433               : "r0", "r1", "r2", "r3", "r4", "r5");
2434 @end example
2436 It is an error for a clobber description to overlap an input or output
2437 operand (for example, an operand describing a register class with one
2438 member, mentioned in the clobber list).  Most notably, it is invalid to
2439 describe that an input operand is modified, but unused as output.  It has
2440 to be specified as an input and output operand anyway.  Note that if there
2441 are only unused output operands, you will then also need to specify
2442 @code{volatile} for the @code{asm} construct, as described below.
2444 If you refer to a particular hardware register from the assembler code,
2445 you will probably have to list the register after the third colon to
2446 tell the compiler the register's value is modified.  In some assemblers,
2447 the register names begin with @samp{%}; to produce one @samp{%} in the
2448 assembler code, you must write @samp{%%} in the input.
2450 If your assembler instruction can alter the condition code register, add
2451 @samp{cc} to the list of clobbered registers.  GNU CC on some machines
2452 represents the condition codes as a specific hardware register;
2453 @samp{cc} serves to name this register.  On other machines, the
2454 condition code is handled differently, and specifying @samp{cc} has no
2455 effect.  But it is valid no matter what the machine.
2457 If your assembler instruction modifies memory in an unpredictable
2458 fashion, add @samp{memory} to the list of clobbered registers.  This
2459 will cause GNU CC to not keep memory values cached in registers across
2460 the assembler instruction.
2462 You can put multiple assembler instructions together in a single
2463 @code{asm} template, separated either with newlines (written as
2464 @samp{\n}) or with semicolons if the assembler allows such semicolons.
2465 The GNU assembler allows semicolons and most Unix assemblers seem to do
2466 so.  The input operands are guaranteed not to use any of the clobbered
2467 registers, and neither will the output operands' addresses, so you can
2468 read and write the clobbered registers as many times as you like.  Here
2469 is an example of multiple instructions in a template; it assumes the
2470 subroutine @code{_foo} accepts arguments in registers 9 and 10:
2472 @example
2473 asm ("movl %0,r9;movl %1,r10;call _foo"
2474      : /* no outputs */
2475      : "g" (from), "g" (to)
2476      : "r9", "r10");
2477 @end example
2479 Unless an output operand has the @samp{&} constraint modifier, GNU CC
2480 may allocate it in the same register as an unrelated input operand, on
2481 the assumption the inputs are consumed before the outputs are produced.
2482 This assumption may be false if the assembler code actually consists of
2483 more than one instruction.  In such a case, use @samp{&} for each output
2484 operand that may not overlap an input.  @xref{Modifiers}.
2486 If you want to test the condition code produced by an assembler
2487 instruction, you must include a branch and a label in the @code{asm}
2488 construct, as follows:
2490 @example
2491 asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:"
2492      : "g" (result)
2493      : "g" (input));
2494 @end example
2496 @noindent
2497 This assumes your assembler supports local labels, as the GNU assembler
2498 and most Unix assemblers do.
2500 Speaking of labels, jumps from one @code{asm} to another are not
2501 supported.  The compiler's optimizers do not know about these jumps, and
2502 therefore they cannot take account of them when deciding how to
2503 optimize.
2505 @cindex macros containing @code{asm}
2506 Usually the most convenient way to use these @code{asm} instructions is to
2507 encapsulate them in macros that look like functions.  For example,
2509 @example
2510 #define sin(x)       \
2511 (@{ double __value, __arg = (x);   \
2512    asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
2513    __value; @})
2514 @end example
2516 @noindent
2517 Here the variable @code{__arg} is used to make sure that the instruction
2518 operates on a proper @code{double} value, and to accept only those
2519 arguments @code{x} which can convert automatically to a @code{double}.
2521 Another way to make sure the instruction operates on the correct data
2522 type is to use a cast in the @code{asm}.  This is different from using a
2523 variable @code{__arg} in that it converts more different types.  For
2524 example, if the desired type were @code{int}, casting the argument to
2525 @code{int} would accept a pointer with no complaint, while assigning the
2526 argument to an @code{int} variable named @code{__arg} would warn about
2527 using a pointer unless the caller explicitly casts it.
2529 If an @code{asm} has output operands, GNU CC assumes for optimization
2530 purposes the instruction has no side effects except to change the output
2531 operands.  This does not mean instructions with a side effect cannot be
2532 used, but you must be careful, because the compiler may eliminate them
2533 if the output operands aren't used, or move them out of loops, or
2534 replace two with one if they constitute a common subexpression.  Also,
2535 if your instruction does have a side effect on a variable that otherwise
2536 appears not to change, the old value of the variable may be reused later
2537 if it happens to be found in a register.
2539 You can prevent an @code{asm} instruction from being deleted, moved
2540 significantly, or combined, by writing the keyword @code{volatile} after
2541 the @code{asm}.  For example:
2543 @example
2544 #define get_and_set_priority(new)  \
2545 (@{ int __old; \
2546    asm volatile ("get_and_set_priority %0, %1": "=g" (__old) : "g" (new)); \
2547    __old; @})
2548 @end example
2550 @noindent
2551 If you write an @code{asm} instruction with no outputs, GNU CC will know
2552 the instruction has side-effects and will not delete the instruction or
2553 move it outside of loops.  If the side-effects of your instruction are
2554 not purely external, but will affect variables in your program in ways
2555 other than reading the inputs and clobbering the specified registers or
2556 memory, you should write the @code{volatile} keyword to prevent future
2557 versions of GNU CC from moving the instruction around within a core
2558 region.
2560 An @code{asm} instruction without any operands or clobbers (and ``old
2561 style'' @code{asm}) will not be deleted or moved significantly,
2562 regardless, unless it is unreachable, the same wasy as if you had
2563 written a @code{volatile} keyword.
2565 Note that even a volatile @code{asm} instruction can be moved in ways
2566 that appear insignificant to the compiler, such as across jump
2567 instructions.  You can't expect a sequence of volatile @code{asm}
2568 instructions to remain perfectly consecutive.  If you want consecutive
2569 output, use a single @code{asm}.
2571 It is a natural idea to look for a way to give access to the condition
2572 code left by the assembler instruction.  However, when we attempted to
2573 implement this, we found no way to make it work reliably.  The problem
2574 is that output operands might need reloading, which would result in
2575 additional following ``store'' instructions.  On most machines, these
2576 instructions would alter the condition code before there was time to
2577 test it.  This problem doesn't arise for ordinary ``test'' and
2578 ``compare'' instructions because they don't have any output operands.
2580 If you are writing a header file that should be includable in ANSI C
2581 programs, write @code{__asm__} instead of @code{asm}.  @xref{Alternate
2582 Keywords}.
2584 @subsection i386 floating point asm operands
2586 There are several rules on the usage of stack-like regs in
2587 asm_operands insns.  These rules apply only to the operands that are
2588 stack-like regs:
2590 @enumerate
2591 @item
2592 Given a set of input regs that die in an asm_operands, it is
2593 necessary to know which are implicitly popped by the asm, and
2594 which must be explicitly popped by gcc.
2596 An input reg that is implicitly popped by the asm must be
2597 explicitly clobbered, unless it is constrained to match an
2598 output operand.
2600 @item
2601 For any input reg that is implicitly popped by an asm, it is
2602 necessary to know how to adjust the stack to compensate for the pop.
2603 If any non-popped input is closer to the top of the reg-stack than
2604 the implicitly popped reg, it would not be possible to know what the
2605 stack looked like --- it's not clear how the rest of the stack ``slides
2606 up''.
2608 All implicitly popped input regs must be closer to the top of
2609 the reg-stack than any input that is not implicitly popped.
2611 It is possible that if an input dies in an insn, reload might
2612 use the input reg for an output reload.  Consider this example:
2614 @example
2615 asm ("foo" : "=t" (a) : "f" (b));
2616 @end example
2618 This asm says that input B is not popped by the asm, and that
2619 the asm pushes a result onto the reg-stack, ie, the stack is one
2620 deeper after the asm than it was before.  But, it is possible that
2621 reload will think that it can use the same reg for both the input and
2622 the output, if input B dies in this insn.
2624 If any input operand uses the @code{f} constraint, all output reg
2625 constraints must use the @code{&} earlyclobber.
2627 The asm above would be written as
2629 @example
2630 asm ("foo" : "=&t" (a) : "f" (b));
2631 @end example
2633 @item
2634 Some operands need to be in particular places on the stack.  All
2635 output operands fall in this category --- there is no other way to
2636 know which regs the outputs appear in unless the user indicates
2637 this in the constraints.
2639 Output operands must specifically indicate which reg an output
2640 appears in after an asm.  @code{=f} is not allowed: the operand
2641 constraints must select a class with a single reg.
2643 @item
2644 Output operands may not be ``inserted'' between existing stack regs.
2645 Since no 387 opcode uses a read/write operand, all output operands
2646 are dead before the asm_operands, and are pushed by the asm_operands.
2647 It makes no sense to push anywhere but the top of the reg-stack.
2649 Output operands must start at the top of the reg-stack: output
2650 operands may not ``skip'' a reg.
2652 @item
2653 Some asm statements may need extra stack space for internal
2654 calculations.  This can be guaranteed by clobbering stack registers
2655 unrelated to the inputs and outputs.
2657 @end enumerate
2659 Here are a couple of reasonable asms to want to write.  This asm
2660 takes one input, which is internally popped, and produces two outputs.
2662 @example
2663 asm ("fsincos" : "=t" (cos), "=u" (sin) : "0" (inp));
2664 @end example
2666 This asm takes two inputs, which are popped by the @code{fyl2xp1} opcode,
2667 and replaces them with one output.  The user must code the @code{st(1)}
2668 clobber for reg-stack.c to know that @code{fyl2xp1} pops both inputs.
2670 @example
2671 asm ("fyl2xp1" : "=t" (result) : "0" (x), "u" (y) : "st(1)");
2672 @end example
2674 @ifclear INTERNALS
2675 @c Show the details on constraints if they do not appear elsewhere in
2676 @c the manual
2677 @include md.texi
2678 @end ifclear
2680 @node Asm Labels
2681 @section Controlling Names Used in Assembler Code
2682 @cindex assembler names for identifiers
2683 @cindex names used in assembler code
2684 @cindex identifiers, names in assembler code
2686 You can specify the name to be used in the assembler code for a C
2687 function or variable by writing the @code{asm} (or @code{__asm__})
2688 keyword after the declarator as follows:
2690 @example
2691 int foo asm ("myfoo") = 2;
2692 @end example
2694 @noindent
2695 This specifies that the name to be used for the variable @code{foo} in
2696 the assembler code should be @samp{myfoo} rather than the usual
2697 @samp{_foo}.
2699 On systems where an underscore is normally prepended to the name of a C
2700 function or variable, this feature allows you to define names for the
2701 linker that do not start with an underscore.
2703 You cannot use @code{asm} in this way in a function @emph{definition}; but
2704 you can get the same effect by writing a declaration for the function
2705 before its definition and putting @code{asm} there, like this:
2707 @example
2708 extern func () asm ("FUNC");
2710 func (x, y)
2711      int x, y;
2712 @dots{}
2713 @end example
2715 It is up to you to make sure that the assembler names you choose do not
2716 conflict with any other assembler symbols.  Also, you must not use a
2717 register name; that would produce completely invalid assembler code.  GNU
2718 CC does not as yet have the ability to store static variables in registers.
2719 Perhaps that will be added.
2721 @node Explicit Reg Vars
2722 @section Variables in Specified Registers
2723 @cindex explicit register variables
2724 @cindex variables in specified registers
2725 @cindex specified registers
2726 @cindex registers, global allocation
2728 GNU C allows you to put a few global variables into specified hardware
2729 registers.  You can also specify the register in which an ordinary
2730 register variable should be allocated.
2732 @itemize @bullet
2733 @item
2734 Global register variables reserve registers throughout the program.
2735 This may be useful in programs such as programming language
2736 interpreters which have a couple of global variables that are accessed
2737 very often.
2739 @item
2740 Local register variables in specific registers do not reserve the
2741 registers.  The compiler's data flow analysis is capable of determining
2742 where the specified registers contain live values, and where they are
2743 available for other uses.  Stores into local register variables may be deleted
2744 when they appear to be dead according to dataflow analysis.  References
2745 to local register variables may be deleted or moved or simplified.
2747 These local variables are sometimes convenient for use with the extended
2748 @code{asm} feature (@pxref{Extended Asm}), if you want to write one
2749 output of the assembler instruction directly into a particular register.
2750 (This will work provided the register you specify fits the constraints
2751 specified for that operand in the @code{asm}.)
2752 @end itemize
2754 @menu
2755 * Global Reg Vars::
2756 * Local Reg Vars::
2757 @end menu
2759 @node Global Reg Vars
2760 @subsection Defining Global Register Variables
2761 @cindex global register variables
2762 @cindex registers, global variables in
2764 You can define a global register variable in GNU C like this:
2766 @example
2767 register int *foo asm ("a5");
2768 @end example
2770 @noindent
2771 Here @code{a5} is the name of the register which should be used.  Choose a
2772 register which is normally saved and restored by function calls on your
2773 machine, so that library routines will not clobber it.
2775 Naturally the register name is cpu-dependent, so you would need to
2776 conditionalize your program according to cpu type.  The register
2777 @code{a5} would be a good choice on a 68000 for a variable of pointer
2778 type.  On machines with register windows, be sure to choose a ``global''
2779 register that is not affected magically by the function call mechanism.
2781 In addition, operating systems on one type of cpu may differ in how they
2782 name the registers; then you would need additional conditionals.  For
2783 example, some 68000 operating systems call this register @code{%a5}.
2785 Eventually there may be a way of asking the compiler to choose a register
2786 automatically, but first we need to figure out how it should choose and
2787 how to enable you to guide the choice.  No solution is evident.
2789 Defining a global register variable in a certain register reserves that
2790 register entirely for this use, at least within the current compilation.
2791 The register will not be allocated for any other purpose in the functions
2792 in the current compilation.  The register will not be saved and restored by
2793 these functions.  Stores into this register are never deleted even if they
2794 would appear to be dead, but references may be deleted or moved or
2795 simplified.
2797 It is not safe to access the global register variables from signal
2798 handlers, or from more than one thread of control, because the system
2799 library routines may temporarily use the register for other things (unless
2800 you recompile them specially for the task at hand).
2802 @cindex @code{qsort}, and global register variables
2803 It is not safe for one function that uses a global register variable to
2804 call another such function @code{foo} by way of a third function
2805 @code{lose} that was compiled without knowledge of this variable (i.e. in a
2806 different source file in which the variable wasn't declared).  This is
2807 because @code{lose} might save the register and put some other value there.
2808 For example, you can't expect a global register variable to be available in
2809 the comparison-function that you pass to @code{qsort}, since @code{qsort}
2810 might have put something else in that register.  (If you are prepared to
2811 recompile @code{qsort} with the same global register variable, you can
2812 solve this problem.)
2814 If you want to recompile @code{qsort} or other source files which do not
2815 actually use your global register variable, so that they will not use that
2816 register for any other purpose, then it suffices to specify the compiler
2817 option @samp{-ffixed-@var{reg}}.  You need not actually add a global
2818 register declaration to their source code.
2820 A function which can alter the value of a global register variable cannot
2821 safely be called from a function compiled without this variable, because it
2822 could clobber the value the caller expects to find there on return.
2823 Therefore, the function which is the entry point into the part of the
2824 program that uses the global register variable must explicitly save and
2825 restore the value which belongs to its caller.
2827 @cindex register variable after @code{longjmp}
2828 @cindex global register after @code{longjmp}
2829 @cindex value after @code{longjmp}
2830 @findex longjmp
2831 @findex setjmp
2832 On most machines, @code{longjmp} will restore to each global register
2833 variable the value it had at the time of the @code{setjmp}.  On some
2834 machines, however, @code{longjmp} will not change the value of global
2835 register variables.  To be portable, the function that called @code{setjmp}
2836 should make other arrangements to save the values of the global register
2837 variables, and to restore them in a @code{longjmp}.  This way, the same
2838 thing will happen regardless of what @code{longjmp} does.
2840 All global register variable declarations must precede all function
2841 definitions.  If such a declaration could appear after function
2842 definitions, the declaration would be too late to prevent the register from
2843 being used for other purposes in the preceding functions.
2845 Global register variables may not have initial values, because an
2846 executable file has no means to supply initial contents for a register.
2848 On the Sparc, there are reports that g3 @dots{} g7 are suitable
2849 registers, but certain library functions, such as @code{getwd}, as well
2850 as the subroutines for division and remainder, modify g3 and g4.  g1 and
2851 g2 are local temporaries.
2853 On the 68000, a2 @dots{} a5 should be suitable, as should d2 @dots{} d7.
2854 Of course, it will not do to use more than a few of those.
2856 @node Local Reg Vars
2857 @subsection Specifying Registers for Local Variables
2858 @cindex local variables, specifying registers
2859 @cindex specifying registers for local variables
2860 @cindex registers for local variables
2862 You can define a local register variable with a specified register
2863 like this:
2865 @example
2866 register int *foo asm ("a5");
2867 @end example
2869 @noindent
2870 Here @code{a5} is the name of the register which should be used.  Note
2871 that this is the same syntax used for defining global register
2872 variables, but for a local variable it would appear within a function.
2874 Naturally the register name is cpu-dependent, but this is not a
2875 problem, since specific registers are most often useful with explicit
2876 assembler instructions (@pxref{Extended Asm}).  Both of these things
2877 generally require that you conditionalize your program according to
2878 cpu type.
2880 In addition, operating systems on one type of cpu may differ in how they
2881 name the registers; then you would need additional conditionals.  For
2882 example, some 68000 operating systems call this register @code{%a5}.
2884 Defining such a register variable does not reserve the register; it
2885 remains available for other uses in places where flow control determines
2886 the variable's value is not live.  However, these registers are made
2887 unavailable for use in the reload pass; excessive use of this feature
2888 leaves the compiler too few available registers to compile certain
2889 functions.
2891 This option does not guarantee that GNU CC will generate code that has
2892 this variable in the register you specify at all times.  You may not
2893 code an explicit reference to this register in an @code{asm} statement
2894 and assume it will always refer to this variable.
2896 Stores into local register variables may be deleted when they appear to be dead
2897 according to dataflow analysis.  References to local register variables may
2898 be deleted or moved or simplified.
2900 @node Alternate Keywords
2901 @section Alternate Keywords
2902 @cindex alternate keywords
2903 @cindex keywords, alternate
2905 The option @samp{-traditional} disables certain keywords; @samp{-ansi}
2906 disables certain others.  This causes trouble when you want to use GNU C
2907 extensions, or ANSI C features, in a general-purpose header file that
2908 should be usable by all programs, including ANSI C programs and traditional
2909 ones.  The keywords @code{asm}, @code{typeof} and @code{inline} cannot be
2910 used since they won't work in a program compiled with @samp{-ansi}, while
2911 the keywords @code{const}, @code{volatile}, @code{signed}, @code{typeof}
2912 and @code{inline} won't work in a program compiled with
2913 @samp{-traditional}.@refill
2915 The way to solve these problems is to put @samp{__} at the beginning and
2916 end of each problematical keyword.  For example, use @code{__asm__}
2917 instead of @code{asm}, @code{__const__} instead of @code{const}, and
2918 @code{__inline__} instead of @code{inline}.
2920 Other C compilers won't accept these alternative keywords; if you want to
2921 compile with another compiler, you can define the alternate keywords as
2922 macros to replace them with the customary keywords.  It looks like this:
2924 @example
2925 #ifndef __GNUC__
2926 #define __asm__ asm
2927 #endif
2928 @end example
2930 @findex __extension__
2931 @samp{-pedantic} causes warnings for many GNU C extensions.  You can
2932 prevent such warnings within one expression by writing
2933 @code{__extension__} before the expression.  @code{__extension__} has no
2934 effect aside from this.
2936 @node Incomplete Enums
2937 @section Incomplete @code{enum} Types
2939 You can define an @code{enum} tag without specifying its possible values.
2940 This results in an incomplete type, much like what you get if you write
2941 @code{struct foo} without describing the elements.  A later declaration
2942 which does specify the possible values completes the type.
2944 You can't allocate variables or storage using the type while it is
2945 incomplete.  However, you can work with pointers to that type.
2947 This extension may not be very useful, but it makes the handling of
2948 @code{enum} more consistent with the way @code{struct} and @code{union}
2949 are handled.
2951 This extension is not supported by GNU C++.
2953 @node Function Names
2954 @section Function Names as Strings
2956 GNU CC predefines two string variables to be the name of the current function.
2957 The variable @code{__FUNCTION__} is the name of the function as it appears
2958 in the source.  The variable @code{__PRETTY_FUNCTION__} is the name of
2959 the function pretty printed in a language specific fashion.
2961 These names are always the same in a C function, but in a C++ function
2962 they may be different.  For example, this program:
2964 @smallexample
2965 extern "C" @{
2966 extern int printf (char *, ...);
2969 class a @{
2970  public:
2971   sub (int i)
2972     @{
2973       printf ("__FUNCTION__ = %s\n", __FUNCTION__);
2974       printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
2975     @}
2979 main (void)
2981   a ax;
2982   ax.sub (0);
2983   return 0;
2985 @end smallexample
2987 @noindent
2988 gives this output:
2990 @smallexample
2991 __FUNCTION__ = sub
2992 __PRETTY_FUNCTION__ = int  a::sub (int)
2993 @end smallexample
2995 These names are not macros: they are predefined string variables.
2996 For example, @samp{#ifdef __FUNCTION__} does not have any special
2997 meaning inside a function, since the preprocessor does not do anything
2998 special with the identifier @code{__FUNCTION__}.
3000 @node Return Address
3001 @section Getting the Return or Frame Address of a Function
3003 These functions may be used to get information about the callers of a
3004 function.
3006 @table @code
3007 @findex __builtin_return_address
3008 @item __builtin_return_address (@var{level})
3009 This function returns the return address of the current function, or of
3010 one of its callers.  The @var{level} argument is number of frames to
3011 scan up the call stack.  A value of @code{0} yields the return address
3012 of the current function, a value of @code{1} yields the return address
3013 of the caller of the current function, and so forth.
3015 The @var{level} argument must be a constant integer.
3017 On some machines it may be impossible to determine the return address of
3018 any function other than the current one; in such cases, or when the top
3019 of the stack has been reached, this function will return @code{0}.
3021 This function should only be used with a non-zero argument for debugging
3022 purposes.
3024 @findex __builtin_frame_address
3025 @item __builtin_frame_address (@var{level})
3026 This function is similar to @code{__builtin_return_address}, but it
3027 returns the address of the function frame rather than the return address
3028 of the function.  Calling @code{__builtin_frame_address} with a value of
3029 @code{0} yields the frame address of the current function, a value of
3030 @code{1} yields the frame address of the caller of the current function,
3031 and so forth.
3033 The frame is the area on the stack which holds local variables and saved
3034 registers.  The frame address is normally the address of the first word
3035 pushed on to the stack by the function.  However, the exact definition
3036 depends upon the processor and the calling convention.  If the processor
3037 has a dedicated frame pointer register, and the function has a frame,
3038 then @code{__builtin_frame_address} will return the value of the frame
3039 pointer register.
3041 The caveats that apply to @code{__builtin_return_address} apply to this
3042 function as well.
3043 @end table
3045 @node Other Builtins
3046 @section Other built-in functions provided by GNU CC
3048 GNU CC provides a large number of built-in functions other than the ones
3049 mentioned above.  Some of these are for internal use in the processing
3050 of exceptions or variable-length argument lists and will not be
3051 documented here because they may change from time to time; we do not
3052 recommend general use of these functions.
3054 The remaining functions are provided for optimization purposes.
3056 GNU CC includes builtin versions of many of the functions in the
3057 standard C library.  These will always be treated as having the same
3058 meaning as the C library function even if you specify the
3059 @samp{-fno-builtin} (@pxref{C Dialect Options}) option.  These functions
3060 correspond to the C library functions @code{alloca}, @code{ffs},
3061 @code{abs}, @code{fabsf}, @code{fabs}, @code{fabsl}, @code{labs},
3062 @code{memcpy}, @code{memcmp}, @code{strcmp}, @code{strcpy},
3063 @code{strlen}, @code{sqrtf}, @code{sqrt}, @code{sqrtl}, @code{sinf},
3064 @code{sin}, @code{sinl}, @code{cosf}, @code{cos}, and @code{cosl}.
3066 @findex __builtin_constant_p
3067 You can use the builtin function @code{__builtin_constant_p} to
3068 determine if a value is known to be constant at compile-time and hence
3069 that GNU CC can perform constant-folding on expressions involving that
3070 value.  The argument of the function is the value to test.  The function
3071 returns the integer 1 if the argument is known to be a compile-time
3072 constant and 0 if it is not known to be a compile-time constant.  A
3073 return of 0 does not indicate that the value is @emph{not} a constant,
3074 but merely that GNU CC cannot prove it is a constant with the specified
3075 value of the @samp{-O} option.
3077 You would typically use this function in an embedded application where
3078 memory was a critical resource.  If you have some complex calculation,
3079 you may want it to be folded if it involves constants, but need to call
3080 a function if it does not.  For example:
3082 @smallexample
3083 #define Scale_Value(X)  \
3084   (__builtin_constant_p (X) ? ((X) * SCALE + OFFSET) : Scale (X))
3085 @end smallexample
3087 You may use this builtin function in either a macro or an inline
3088 function.  However, if you use it in an inlined function and pass an
3089 argument of the function as the argument to the builtin, GNU CC will
3090 never return 1 when you call the inline function with a string constant
3091 or constructor expression (@pxref{Constructors}) and will not return 1
3092 when you pass a constant numeric value to the inline function unless you
3093 specify the @samp{-O} option.
3095 @node Deprecated Features
3096 @section Deprecated Features
3098 In the past, the GNU C++ compiler was extended to experiment with new
3099 features, at a time when the C++ language was still evolving. Now that
3100 the C++ standard is complete, some of those features are superceded by
3101 superior alternatives. Using the old features might cause a warning in
3102 some cases that the feature will be dropped in the future. In other
3103 cases, the feature might be gone already.
3105 While the list below is not exhaustive, it documents some of the options
3106 that are now deprecated:
3108 @table @code
3109 @item -fthis-is-variable
3110 In early versions of C++, assignment to this could be used to implement
3111 application-defined memory allocation. Now, allocation functions
3112 (@samp{operator new}) are the standard-conforming way to achieve the
3113 same effect.
3115 @item -fexternal-templates
3116 @itemx -falt-external-templates
3117 These are two of the many ways for g++ to implement template
3118 instantiation. @xref{Template Instantiation}. The C++ standard clearly
3119 defines how template definitions have to be organized across
3120 implementation units. g++ has an implicit instantiation mechanism that
3121 should work just fine for standard-conforming code.
3123 @end table
3125 @node C++ Extensions
3126 @chapter Extensions to the C++ Language
3127 @cindex extensions, C++ language
3128 @cindex C++ language extensions
3130 The GNU compiler provides these extensions to the C++ language (and you
3131 can also use most of the C language extensions in your C++ programs).  If you
3132 want to write code that checks whether these features are available, you can
3133 test for the GNU compiler the same way as for C programs: check for a
3134 predefined macro @code{__GNUC__}.  You can also use @code{__GNUG__} to
3135 test specifically for GNU C++ (@pxref{Standard Predefined,,Standard
3136 Predefined Macros,cpp.info,The C Preprocessor}).
3138 @menu
3139 * Naming Results::      Giving a name to C++ function return values.
3140 * Min and Max::         C++ Minimum and maximum operators.
3141 * Destructors and Goto:: Goto is safe to use in C++ even when destructors
3142                            are needed.
3143 * C++ Interface::       You can use a single C++ header file for both
3144                          declarations and definitions.
3145 * Template Instantiation:: Methods for ensuring that exactly one copy of
3146                          each needed template instantiation is emitted.
3147 * Bound member functions:: You can extract a function pointer to the
3148                         method denoted by a @samp{->*} or @samp{.*} expression.
3149 * C++ Signatures::      You can specify abstract types to get subtype
3150                          polymorphism independent from inheritance.
3151                         
3152 @end menu
3154 @node Naming Results
3155 @section Named Return Values in C++
3157 @cindex @code{return}, in C++ function header
3158 @cindex return value, named, in C++
3159 @cindex named return value in C++
3160 @cindex C++ named return value
3161 GNU C++ extends the function-definition syntax to allow you to specify a
3162 name for the result of a function outside the body of the definition, in
3163 C++ programs:
3165 @example
3166 @group
3167 @var{type}
3168 @var{functionname} (@var{args}) return @var{resultname};
3170   @dots{}
3171   @var{body}
3172   @dots{}
3174 @end group
3175 @end example
3177 You can use this feature to avoid an extra constructor call when
3178 a function result has a class type.  For example, consider a function
3179 @code{m}, declared as @w{@samp{X v = m ();}}, whose result is of class
3180 @code{X}:
3182 @example
3184 m ()
3186   X b;
3187   b.a = 23;
3188   return b;
3190 @end example
3192 @cindex implicit argument: return value
3193 Although @code{m} appears to have no arguments, in fact it has one implicit
3194 argument: the address of the return value.  At invocation, the address
3195 of enough space to hold @code{v} is sent in as the implicit argument.
3196 Then @code{b} is constructed and its @code{a} field is set to the value
3197 23.  Finally, a copy constructor (a constructor of the form @samp{X(X&)})
3198 is applied to @code{b}, with the (implicit) return value location as the
3199 target, so that @code{v} is now bound to the return value.
3201 But this is wasteful.  The local @code{b} is declared just to hold
3202 something that will be copied right out.  While a compiler that
3203 combined an ``elision'' algorithm with interprocedural data flow
3204 analysis could conceivably eliminate all of this, it is much more
3205 practical to allow you to assist the compiler in generating
3206 efficient code by manipulating the return value explicitly,
3207 thus avoiding the local variable and copy constructor altogether.
3209 Using the extended GNU C++ function-definition syntax, you can avoid the
3210 temporary allocation and copying by naming @code{r} as your return value
3211 at the outset, and assigning to its @code{a} field directly:
3213 @example
3215 m () return r;
3217   r.a = 23;
3219 @end example
3221 @noindent
3222 The declaration of @code{r} is a standard, proper declaration, whose effects
3223 are executed @strong{before} any of the body of @code{m}.
3225 Functions of this type impose no additional restrictions; in particular,
3226 you can execute @code{return} statements, or return implicitly by
3227 reaching the end of the function body (``falling off the edge'').
3228 Cases like
3230 @example
3232 m () return r (23);
3234   return;
3236 @end example
3238 @noindent
3239 (or even @w{@samp{X m () return r (23); @{ @}}}) are unambiguous, since
3240 the return value @code{r} has been initialized in either case.  The
3241 following code may be hard to read, but also works predictably:
3243 @example
3245 m () return r;
3247   X b;
3248   return b;
3250 @end example
3252 The return value slot denoted by @code{r} is initialized at the outset,
3253 but the statement @samp{return b;} overrides this value.  The compiler
3254 deals with this by destroying @code{r} (calling the destructor if there
3255 is one, or doing nothing if there is not), and then reinitializing
3256 @code{r} with @code{b}.
3258 This extension is provided primarily to help people who use overloaded
3259 operators, where there is a great need to control not just the
3260 arguments, but the return values of functions.  For classes where the
3261 copy constructor incurs a heavy performance penalty (especially in the
3262 common case where there is a quick default constructor), this is a major
3263 savings.  The disadvantage of this extension is that you do not control
3264 when the default constructor for the return value is called: it is
3265 always called at the beginning.
3267 @node Min and Max
3268 @section Minimum and Maximum Operators in C++
3270 It is very convenient to have operators which return the ``minimum'' or the
3271 ``maximum'' of two arguments.  In GNU C++ (but not in GNU C),
3273 @table @code
3274 @item @var{a} <? @var{b}
3275 @findex <?
3276 @cindex minimum operator
3277 is the @dfn{minimum}, returning the smaller of the numeric values
3278 @var{a} and @var{b};
3280 @item @var{a} >? @var{b}
3281 @findex >?
3282 @cindex maximum operator
3283 is the @dfn{maximum}, returning the larger of the numeric values @var{a}
3284 and @var{b}.
3285 @end table
3287 These operations are not primitive in ordinary C++, since you can
3288 use a macro to return the minimum of two things in C++, as in the
3289 following example.
3291 @example
3292 #define MIN(X,Y) ((X) < (Y) ? : (X) : (Y))
3293 @end example
3295 @noindent
3296 You might then use @w{@samp{int min = MIN (i, j);}} to set @var{min} to
3297 the minimum value of variables @var{i} and @var{j}.
3299 However, side effects in @code{X} or @code{Y} may cause unintended
3300 behavior.  For example, @code{MIN (i++, j++)} will fail, incrementing
3301 the smaller counter twice.  A GNU C extension allows you to write safe
3302 macros that avoid this kind of problem (@pxref{Naming Types,,Naming an
3303 Expression's Type}).  However, writing @code{MIN} and @code{MAX} as
3304 macros also forces you to use function-call notation for a
3305 fundamental arithmetic operation.  Using GNU C++ extensions, you can
3306 write @w{@samp{int min = i <? j;}} instead.
3308 Since @code{<?} and @code{>?} are built into the compiler, they properly
3309 handle expressions with side-effects;  @w{@samp{int min = i++ <? j++;}}
3310 works correctly.
3312 @node Destructors and Goto
3313 @section @code{goto} and Destructors in GNU C++
3315 @cindex @code{goto} in C++
3316 @cindex destructors vs @code{goto}
3317 In C++ programs, you can safely use the @code{goto} statement.  When you
3318 use it to exit a block which contains aggregates requiring destructors,
3319 the destructors will run before the @code{goto} transfers control.
3321 @cindex constructors vs @code{goto}
3322 The compiler still forbids using @code{goto} to @emph{enter} a scope
3323 that requires constructors.
3325 @node C++ Interface
3326 @section Declarations and Definitions in One Header
3328 @cindex interface and implementation headers, C++
3329 @cindex C++ interface and implementation headers
3330 C++ object definitions can be quite complex.  In principle, your source
3331 code will need two kinds of things for each object that you use across
3332 more than one source file.  First, you need an @dfn{interface}
3333 specification, describing its structure with type declarations and
3334 function prototypes.  Second, you need the @dfn{implementation} itself.
3335 It can be tedious to maintain a separate interface description in a
3336 header file, in parallel to the actual implementation.  It is also
3337 dangerous, since separate interface and implementation definitions may
3338 not remain parallel.
3340 @cindex pragmas, interface and implementation
3341 With GNU C++, you can use a single header file for both purposes.
3343 @quotation
3344 @emph{Warning:} The mechanism to specify this is in transition.  For the
3345 nonce, you must use one of two @code{#pragma} commands; in a future
3346 release of GNU C++, an alternative mechanism will make these
3347 @code{#pragma} commands unnecessary.
3348 @end quotation
3350 The header file contains the full definitions, but is marked with
3351 @samp{#pragma interface} in the source code.  This allows the compiler
3352 to use the header file only as an interface specification when ordinary
3353 source files incorporate it with @code{#include}.  In the single source
3354 file where the full implementation belongs, you can use either a naming
3355 convention or @samp{#pragma implementation} to indicate this alternate
3356 use of the header file.
3358 @table @code
3359 @item #pragma interface
3360 @itemx #pragma interface "@var{subdir}/@var{objects}.h"
3361 @kindex #pragma interface
3362 Use this directive in @emph{header files} that define object classes, to save
3363 space in most of the object files that use those classes.  Normally,
3364 local copies of certain information (backup copies of inline member
3365 functions, debugging information, and the internal tables that implement
3366 virtual functions) must be kept in each object file that includes class
3367 definitions.  You can use this pragma to avoid such duplication.  When a
3368 header file containing @samp{#pragma interface} is included in a
3369 compilation, this auxiliary information will not be generated (unless
3370 the main input source file itself uses @samp{#pragma implementation}).
3371 Instead, the object files will contain references to be resolved at link
3372 time.
3374 The second form of this directive is useful for the case where you have
3375 multiple headers with the same name in different directories.  If you
3376 use this form, you must specify the same string to @samp{#pragma
3377 implementation}.
3379 @item #pragma implementation
3380 @itemx #pragma implementation "@var{objects}.h"
3381 @kindex #pragma implementation
3382 Use this pragma in a @emph{main input file}, when you want full output from
3383 included header files to be generated (and made globally visible).  The
3384 included header file, in turn, should use @samp{#pragma interface}.
3385 Backup copies of inline member functions, debugging information, and the
3386 internal tables used to implement virtual functions are all generated in
3387 implementation files.
3389 @cindex implied @code{#pragma implementation}
3390 @cindex @code{#pragma implementation}, implied
3391 @cindex naming convention, implementation headers
3392 If you use @samp{#pragma implementation} with no argument, it applies to
3393 an include file with the same basename@footnote{A file's @dfn{basename}
3394 was the name stripped of all leading path information and of trailing
3395 suffixes, such as @samp{.h} or @samp{.C} or @samp{.cc}.} as your source
3396 file.  For example, in @file{allclass.cc}, giving just
3397 @samp{#pragma implementation}
3398 by itself is equivalent to @samp{#pragma implementation "allclass.h"}.
3400 In versions of GNU C++ prior to 2.6.0 @file{allclass.h} was treated as
3401 an implementation file whenever you would include it from
3402 @file{allclass.cc} even if you never specified @samp{#pragma
3403 implementation}.  This was deemed to be more trouble than it was worth,
3404 however, and disabled.
3406 If you use an explicit @samp{#pragma implementation}, it must appear in
3407 your source file @emph{before} you include the affected header files.
3409 Use the string argument if you want a single implementation file to
3410 include code from multiple header files.  (You must also use
3411 @samp{#include} to include the header file; @samp{#pragma
3412 implementation} only specifies how to use the file---it doesn't actually
3413 include it.)
3415 There is no way to split up the contents of a single header file into
3416 multiple implementation files.
3417 @end table
3419 @cindex inlining and C++ pragmas
3420 @cindex C++ pragmas, effect on inlining
3421 @cindex pragmas in C++, effect on inlining
3422 @samp{#pragma implementation} and @samp{#pragma interface} also have an
3423 effect on function inlining.
3425 If you define a class in a header file marked with @samp{#pragma
3426 interface}, the effect on a function defined in that class is similar to
3427 an explicit @code{extern} declaration---the compiler emits no code at
3428 all to define an independent version of the function.  Its definition
3429 is used only for inlining with its callers.
3431 Conversely, when you include the same header file in a main source file
3432 that declares it as @samp{#pragma implementation}, the compiler emits
3433 code for the function itself; this defines a version of the function
3434 that can be found via pointers (or by callers compiled without
3435 inlining).  If all calls to the function can be inlined, you can avoid
3436 emitting the function by compiling with @samp{-fno-implement-inlines}.
3437 If any calls were not inlined, you will get linker errors.
3439 @node Template Instantiation
3440 @section Where's the Template?
3442 @cindex template instantiation
3444 C++ templates are the first language feature to require more
3445 intelligence from the environment than one usually finds on a UNIX
3446 system.  Somehow the compiler and linker have to make sure that each
3447 template instance occurs exactly once in the executable if it is needed,
3448 and not at all otherwise.  There are two basic approaches to this
3449 problem, which I will refer to as the Borland model and the Cfront model.
3451 @table @asis
3452 @item Borland model
3453 Borland C++ solved the template instantiation problem by adding the code
3454 equivalent of common blocks to their linker; the compiler emits template
3455 instances in each translation unit that uses them, and the linker
3456 collapses them together.  The advantage of this model is that the linker
3457 only has to consider the object files themselves; there is no external
3458 complexity to worry about.  This disadvantage is that compilation time
3459 is increased because the template code is being compiled repeatedly.
3460 Code written for this model tends to include definitions of all
3461 templates in the header file, since they must be seen to be
3462 instantiated.
3464 @item Cfront model
3465 The AT&T C++ translator, Cfront, solved the template instantiation
3466 problem by creating the notion of a template repository, an
3467 automatically maintained place where template instances are stored.  A
3468 more modern version of the repository works as follows: As individual
3469 object files are built, the compiler places any template definitions and
3470 instantiations encountered in the repository.  At link time, the link
3471 wrapper adds in the objects in the repository and compiles any needed
3472 instances that were not previously emitted.  The advantages of this
3473 model are more optimal compilation speed and the ability to use the
3474 system linker; to implement the Borland model a compiler vendor also
3475 needs to replace the linker.  The disadvantages are vastly increased
3476 complexity, and thus potential for error; for some code this can be
3477 just as transparent, but in practice it can been very difficult to build
3478 multiple programs in one directory and one program in multiple
3479 directories.  Code written for this model tends to separate definitions
3480 of non-inline member templates into a separate file, which should be
3481 compiled separately.
3482 @end table
3484 When used with GNU ld version 2.8 or later on an ELF system such as
3485 Linux/GNU or Solaris 2, or on Microsoft Windows, g++ supports the
3486 Borland model.  On other systems, g++ implements neither automatic
3487 model.
3489 A future version of g++ will support a hybrid model whereby the compiler
3490 will emit any instantiations for which the template definition is
3491 included in the compile, and store template definitions and
3492 instantiation context information into the object file for the rest.
3493 The link wrapper will extract that information as necessary and invoke
3494 the compiler to produce the remaining instantiations.  The linker will
3495 then combine duplicate instantiations.
3497 In the mean time, you have the following options for dealing with
3498 template instantiations:
3500 @enumerate
3501 @item
3502 Compile your template-using code with @samp{-frepo}.  The compiler will
3503 generate files with the extension @samp{.rpo} listing all of the
3504 template instantiations used in the corresponding object files which
3505 could be instantiated there; the link wrapper, @samp{collect2}, will
3506 then update the @samp{.rpo} files to tell the compiler where to place
3507 those instantiations and rebuild any affected object files.  The
3508 link-time overhead is negligible after the first pass, as the compiler
3509 will continue to place the instantiations in the same files.
3511 This is your best option for application code written for the Borland
3512 model, as it will just work.  Code written for the Cfront model will
3513 need to be modified so that the template definitions are available at
3514 one or more points of instantiation; usually this is as simple as adding
3515 @code{#include <tmethods.cc>} to the end of each template header.
3517 For library code, if you want the library to provide all of the template
3518 instantiations it needs, just try to link all of its object files
3519 together; the link will fail, but cause the instantiations to be
3520 generated as a side effect.  Be warned, however, that this may cause
3521 conflicts if multiple libraries try to provide the same instantiations.
3522 For greater control, use explicit instantiation as described in the next
3523 option.
3525 @item
3526 Compile your code with @samp{-fno-implicit-templates} to disable the
3527 implicit generation of template instances, and explicitly instantiate
3528 all the ones you use.  This approach requires more knowledge of exactly
3529 which instances you need than do the others, but it's less
3530 mysterious and allows greater control.  You can scatter the explicit
3531 instantiations throughout your program, perhaps putting them in the
3532 translation units where the instances are used or the translation units
3533 that define the templates themselves; you can put all of the explicit
3534 instantiations you need into one big file; or you can create small files
3535 like
3537 @example
3538 #include "Foo.h"
3539 #include "Foo.cc"
3541 template class Foo<int>;
3542 template ostream& operator <<
3543                 (ostream&, const Foo<int>&);
3544 @end example
3546 for each of the instances you need, and create a template instantiation
3547 library from those.
3549 If you are using Cfront-model code, you can probably get away with not
3550 using @samp{-fno-implicit-templates} when compiling files that don't
3551 @samp{#include} the member template definitions.
3553 If you use one big file to do the instantiations, you may want to
3554 compile it without @samp{-fno-implicit-templates} so you get all of the
3555 instances required by your explicit instantiations (but not by any
3556 other files) without having to specify them as well.
3558 g++ has extended the template instantiation syntax outlined in the
3559 Working Paper to allow forward declaration of explicit instantiations
3560 and instantiation of the compiler support data for a template class
3561 (i.e. the vtable) without instantiating any of its members:
3563 @example
3564 extern template int max (int, int);
3565 inline template class Foo<int>;
3566 @end example
3568 @item
3569 Do nothing.  Pretend g++ does implement automatic instantiation
3570 management.  Code written for the Borland model will work fine, but
3571 each translation unit will contain instances of each of the templates it
3572 uses.  In a large program, this can lead to an unacceptable amount of code
3573 duplication.
3575 @item
3576 Add @samp{#pragma interface} to all files containing template
3577 definitions.  For each of these files, add @samp{#pragma implementation
3578 "@var{filename}"} to the top of some @samp{.C} file which
3579 @samp{#include}s it.  Then compile everything with
3580 @samp{-fexternal-templates}.  The templates will then only be expanded
3581 in the translation unit which implements them (i.e. has a @samp{#pragma
3582 implementation} line for the file where they live); all other files will
3583 use external references.  If you're lucky, everything should work
3584 properly.  If you get undefined symbol errors, you need to make sure
3585 that each template instance which is used in the program is used in the
3586 file which implements that template.  If you don't have any use for a
3587 particular instance in that file, you can just instantiate it
3588 explicitly, using the syntax from the latest C++ working paper:
3590 @example
3591 template class A<int>;
3592 template ostream& operator << (ostream&, const A<int>&);
3593 @end example
3595 This strategy will work with code written for either model.  If you are
3596 using code written for the Cfront model, the file containing a class
3597 template and the file containing its member templates should be
3598 implemented in the same translation unit.
3600 A slight variation on this approach is to instead use the flag
3601 @samp{-falt-external-templates}; this flag causes template
3602 instances to be emitted in the translation unit that implements the
3603 header where they are first instantiated, rather than the one which
3604 implements the file where the templates are defined.  This header must
3605 be the same in all translation units, or things are likely to break.
3607 @xref{C++ Interface,,Declarations and Definitions in One Header}, for
3608 more discussion of these pragmas.
3609 @end enumerate
3611 @node Bound member functions
3612 @section Extracting the function pointer from a bound pointer to member function
3614 @cindex pmf
3615 @cindex pointer to member function
3616 @cindex bound pointer to member function
3618 In C++, pointer to member functions (PMFs) are implemented using a wide
3619 pointer of sorts to handle all the possible call mechanisms; the PMF
3620 needs to store information about how to adjust the @samp{this} pointer,
3621 and if the function pointed to is virtual, where to find the vtable, and
3622 where in the vtable to look for the member function.  If you are using
3623 PMFs in an inner loop, you should really reconsider that decision.  If
3624 that is not an option, you can extract the pointer to the function that
3625 would be called for a given object/PMF pair and call it directly inside
3626 the inner loop, to save a bit of time.
3628 Note that you will still be paying the penalty for the call through a
3629 function pointer; on most modern architectures, such a call defeats the
3630 branch prediction features of the CPU.  This is also true of normal
3631 virtual function calls.
3633 The syntax for this extension is
3635 @example
3636 extern A a;
3637 extern int (A::*fp)();
3638 typedef int (*fptr)(A *);
3640 fptr p = (fptr)(a.*fp);
3641 @end example
3643 You must specify @samp{-Wno-pmf-conversions} to use this extension.
3645 @node C++ Signatures
3646 @section Type Abstraction using Signatures
3648 @findex signature
3649 @cindex type abstraction, C++
3650 @cindex C++ type abstraction
3651 @cindex subtype polymorphism, C++
3652 @cindex C++ subtype polymorphism
3653 @cindex signatures, C++
3654 @cindex C++ signatures
3656 In GNU C++, you can use the keyword @code{signature} to define a
3657 completely abstract class interface as a datatype.  You can connect this
3658 abstraction with actual classes using signature pointers.  If you want
3659 to use signatures, run the GNU compiler with the
3660 @samp{-fhandle-signatures} command-line option.  (With this option, the
3661 compiler reserves a second keyword @code{sigof} as well, for a future
3662 extension.)
3664 Roughly, signatures are type abstractions or interfaces of classes.
3665 Some other languages have similar facilities.  C++ signatures are
3666 related to ML's signatures, Haskell's type classes, definition modules
3667 in Modula-2, interface modules in Modula-3, abstract types in Emerald,
3668 type modules in Trellis/Owl, categories in Scratchpad II, and types in
3669 POOL-I.  For a more detailed discussion of signatures, see
3670 @cite{Signatures: A Language Extension for Improving Type Abstraction and
3671 Subtype Polymorphism in C++}
3672 by @w{Gerald} Baumgartner and Vincent F. Russo (Tech report
3673 CSD--TR--95--051, Dept. of Computer Sciences, Purdue University,
3674 August 1995, a slightly improved version appeared in
3675 @emph{Software---Practice & Experience}, @b{25}(8), pp. 863--889,
3676 August 1995).  You can get the tech report by anonymous FTP from
3677 @code{ftp.cs.purdue.edu} in @file{pub/gb/Signature-design.ps.gz}.
3679 Syntactically, a signature declaration is a collection of
3680 member function declarations and nested type declarations.
3681 For example, this signature declaration defines a new abstract type
3682 @code{S} with member functions @samp{int foo ()} and @samp{int bar (int)}:
3684 @example
3685 signature S
3687   int foo ();
3688   int bar (int);
3690 @end example
3692 Since signature types do not include implementation definitions, you
3693 cannot write an instance of a signature directly.  Instead, you can
3694 define a pointer to any class that contains the required interfaces as a
3695 @dfn{signature pointer}.  Such a class @dfn{implements} the signature
3696 type.
3697 @c Eventually signature references should work too.
3699 To use a class as an implementation of @code{S}, you must ensure that
3700 the class has public member functions @samp{int foo ()} and @samp{int
3701 bar (int)}.  The class can have other member functions as well, public
3702 or not; as long as it offers what's declared in the signature, it is
3703 suitable as an implementation of that signature type.
3705 For example, suppose that @code{C} is a class that meets the
3706 requirements of signature @code{S} (@code{C} @dfn{conforms to}
3707 @code{S}).  Then
3709 @example
3710 C obj;
3711 S * p = &obj;
3712 @end example
3714 @noindent
3715 defines a signature pointer @code{p} and initializes it to point to an
3716 object of type @code{C}.
3717 The member function call @w{@samp{int i = p->foo ();}}
3718 executes @samp{obj.foo ()}.
3720 @cindex @code{signature} in C++, advantages
3721 Abstract virtual classes provide somewhat similar facilities in standard
3722 C++.  There are two main advantages to using signatures instead:
3724 @enumerate
3725 @item
3726 Subtyping becomes independent from inheritance.  A class or signature
3727 type @code{T} is a subtype of a signature type @code{S} independent of
3728 any inheritance hierarchy as long as all the member functions declared
3729 in @code{S} are also found in @code{T}.  So you can define a subtype
3730 hierarchy that is completely independent from any inheritance
3731 (implementation) hierarchy, instead of being forced to use types that
3732 mirror the class inheritance hierarchy.
3734 @item
3735 Signatures allow you to work with existing class hierarchies as
3736 implementations of a signature type.  If those class hierarchies are
3737 only available in compiled form, you're out of luck with abstract virtual
3738 classes, since an abstract virtual class cannot be retrofitted on top of
3739 existing class hierarchies.  So you would be required to write interface
3740 classes as subtypes of the abstract virtual class.
3741 @end enumerate
3743 @cindex default implementation, signature member function
3744 @cindex signature member function default implementation
3745 There is one more detail about signatures.  A signature declaration can
3746 contain member function @emph{definitions} as well as member function
3747 declarations.  A signature member function with a full definition is
3748 called a @emph{default implementation}; classes need not contain that
3749 particular interface in order to conform.  For example, a
3750 class @code{C} can conform to the signature
3752 @example
3753 signature T
3755   int f (int);
3756   int f0 () @{ return f (0); @};
3758 @end example
3760 @noindent
3761 whether or not @code{C} implements the member function @samp{int f0 ()}.
3762 If you define @code{C::f0}, that definition takes precedence;
3763 otherwise, the default implementation @code{S::f0} applies.
3765 @ignore
3766 There will be more support for signatures in the future.
3767 Add to this doc as the implementation grows.
3768 In particular, the following features are planned but not yet
3769 implemented:
3770 @itemize @bullet
3771 @item signature references,
3772 @item signature inheritance,
3773 @item the @code{sigof} construct for extracting the signature information
3774       of a class,
3775 @item views for renaming member functions when matching a class type
3776       with a signature type,
3777 @item specifying exceptions with signature member functions, and
3778 @item signature templates.
3779 @end itemize
3780 This list is roughly in the order in which we intend to implement
3781 them.  Watch this space for updates.
3782 @end ignore