Annotation of gcc/extend.texi, revision 1.1.1.8

1.1.1.7   root        1: @c Copyright (C) 1988, 1989, 1992, 1993, 1994 Free Software Foundation, Inc.
1.1       root        2: @c This is part of the GCC manual.
                      3: @c For copying conditions, see the file gcc.texi.
                      4: 
1.1.1.5   root        5: @node C Extensions
                      6: @chapter Extensions to the C Language Family
1.1       root        7: @cindex extensions, C language
                      8: @cindex C language extensions
                      9: 
                     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.
                     15: 
1.1.1.7   root       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
1.1.1.5   root       18: C++ Language}, for extensions that apply @emph{only} to C++.
                     19: 
                     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}.
1.1.1.6   root       35: * Complex::             Data types for complex numbers.
1.1.1.5   root       36: * Zero Length::         Zero-length arrays.
                     37: * Variable Length::     Arrays whose length is computed at run time.
                     38: * Macro Varargs::      Macros with variable number of arguments.
                     39: * Subscripting::        Any array can be subscripted, even if not an lvalue.
                     40: * Pointer Arith::       Arithmetic on @code{void}-pointers and function pointers.
                     41: * Initializers::        Non-constant initializers.
                     42: * Constructors::        Constructor expressions give structures, unions
                     43:                          or arrays as values.
                     44: * Labeled Elements::   Labeling elements of initializers.
                     45: * Cast to Union::       Casting to union type from any member of the union.
                     46: * Case Ranges::                `case 1 ... 9' and such.
                     47: * Function Attributes:: Declaring that functions have no side effects,
                     48:                          or that they can never return.
                     49: * Function Prototypes:: Prototype declarations and old-style definitions.
1.1.1.8 ! root       50: * C++ Comments::        C++ comments are recognized.
1.1.1.5   root       51: * Dollar Signs::        Dollar sign is allowed in identifiers.
                     52: * Character Escapes::   @samp{\e} stands for the character @key{ESC}.
                     53: * Variable Attributes::        Specifying attributes of variables.
1.1.1.8 ! root       54: * Type Attributes::    Specifying attributes of types.
1.1.1.5   root       55: * Alignment::           Inquiring about the alignment of a type or variable.
                     56: * Inline::              Defining inline functions (as fast as macros).
                     57: * Extended Asm::        Assembler instructions with C expressions as operands.
                     58:                          (With them you can define ``built-in'' functions.)
                     59: * Asm Labels::          Specifying the assembler name to use for a C symbol.
                     60: * Explicit Reg Vars::   Defining variables residing in specified registers.
                     61: * Alternate Keywords::  @code{__const__}, @code{__asm__}, etc., for header files.
                     62: * Incomplete Enums::    @code{enum foo;}, with details to follow.
                     63: * Function Names::     Printable strings which are the name of the current
                     64:                         function.
                     65: @end menu
                     66: @end ifset
                     67: @ifclear INTERNALS
1.1       root       68: @menu
                     69: * Statement Exprs::     Putting statements and declarations inside expressions.
                     70: * Local Labels::        Labels local to a statement-expression.
                     71: * Labels as Values::    Getting pointers to labels, and computed gotos.
                     72: * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
1.1.1.5   root       73: * Constructing Calls:: Dispatching a call to another function.
1.1       root       74: * Naming Types::        Giving a name to the type of some expression.
                     75: * Typeof::              @code{typeof}: referring to the type of an expression.
                     76: * Lvalues::             Using @samp{?:}, @samp{,} and casts in lvalues.
                     77: * Conditionals::        Omitting the middle operand of a @samp{?:} expression.
                     78: * Long Long::          Double-word integers---@code{long long int}.
1.1.1.6   root       79: * Complex::             Data types for complex numbers.
1.1       root       80: * Zero Length::         Zero-length arrays.
                     81: * Variable Length::     Arrays whose length is computed at run time.
1.1.1.3   root       82: * Macro Varargs::      Macros with variable number of arguments.
1.1       root       83: * Subscripting::        Any array can be subscripted, even if not an lvalue.
                     84: * Pointer Arith::       Arithmetic on @code{void}-pointers and function pointers.
                     85: * Initializers::        Non-constant initializers.
                     86: * Constructors::        Constructor expressions give structures, unions
                     87:                          or arrays as values.
                     88: * Labeled Elements::   Labeling elements of initializers.
                     89: * Cast to Union::       Casting to union type from any member of the union.
                     90: * Case Ranges::                `case 1 ... 9' and such.
                     91: * Function Attributes:: Declaring that functions have no side effects,
                     92:                          or that they can never return.
1.1.1.3   root       93: * Function Prototypes:: Prototype declarations and old-style definitions.
1.1.1.8 ! root       94: * C++ Comments::        C++ comments are recognized.
1.1       root       95: * Dollar Signs::        Dollar sign is allowed in identifiers.
                     96: * Character Escapes::   @samp{\e} stands for the character @key{ESC}.
                     97: * Variable Attributes::        Specifying attributes of variables.
1.1.1.8 ! root       98: * Type Attributes::    Specifying attributes of types.
1.1       root       99: * Alignment::           Inquiring about the alignment of a type or variable.
                    100: * Inline::              Defining inline functions (as fast as macros).
                    101: * Extended Asm::        Assembler instructions with C expressions as operands.
                    102:                          (With them you can define ``built-in'' functions.)
1.1.1.5   root      103: * Constraints::         Constraints for asm operands
1.1       root      104: * Asm Labels::          Specifying the assembler name to use for a C symbol.
                    105: * Explicit Reg Vars::   Defining variables residing in specified registers.
                    106: * Alternate Keywords::  @code{__const__}, @code{__asm__}, etc., for header files.
                    107: * Incomplete Enums::    @code{enum foo;}, with details to follow.
1.1.1.5   root      108: * Function Names::     Printable strings which are the name of the current
                    109:                         function.
1.1       root      110: @end menu
1.1.1.5   root      111: @end ifclear
1.1       root      112: 
                    113: @node Statement Exprs
1.1.1.5   root      114: @section Statements and Declarations in Expressions
1.1       root      115: @cindex statements inside expressions
                    116: @cindex declarations inside expressions
                    117: @cindex expressions containing statements
                    118: @cindex macros, statements in expressions
                    119: 
1.1.1.5   root      120: @c the above section title wrapped and causes an underfull hbox.. i
                    121: @c changed it from "within" to "in". --mew 4feb93
                    122: 
1.1.1.3   root      123: A compound statement enclosed in parentheses may appear as an expression
                    124: in GNU C.  This allows you to use loops, switches, and local variables
                    125: within an expression.
                    126: 
                    127: Recall that a compound statement is a sequence of statements surrounded
                    128: by braces; in this construct, parentheses go around the braces.  For
1.1       root      129: example:
                    130: 
                    131: @example
                    132: (@{ int y = foo (); int z;
                    133:    if (y > 0) z = y;
                    134:    else z = - y;
                    135:    z; @})
                    136: @end example
                    137: 
                    138: @noindent
                    139: is a valid (though slightly more complex than necessary) expression
                    140: for the absolute value of @code{foo ()}.
                    141: 
1.1.1.3   root      142: The last thing in the compound statement should be an expression
                    143: followed by a semicolon; the value of this subexpression serves as the
                    144: value of the entire construct.  (If you use some other kind of statement
                    145: last within the braces, the construct has type @code{void}, and thus
                    146: effectively no value.)
                    147: 
1.1       root      148: This feature is especially useful in making macro definitions ``safe'' (so
                    149: that they evaluate each operand exactly once).  For example, the
                    150: ``maximum'' function is commonly defined as a macro in standard C as
                    151: follows:
                    152: 
                    153: @example
                    154: #define max(a,b) ((a) > (b) ? (a) : (b))
                    155: @end example
                    156: 
                    157: @noindent
                    158: @cindex side effects, macro argument
                    159: But this definition computes either @var{a} or @var{b} twice, with bad
                    160: results if the operand has side effects.  In GNU C, if you know the
                    161: type of the operands (here let's assume @code{int}), you can define
                    162: the macro safely as follows:
                    163: 
                    164: @example
                    165: #define maxint(a,b) \
                    166:   (@{int _a = (a), _b = (b); _a > _b ? _a : _b; @})
                    167: @end example
                    168: 
                    169: Embedded statements are not allowed in constant expressions, such as
                    170: the value of an enumeration constant, the width of a bit field, or
                    171: the initial value of a static variable.
                    172: 
                    173: If you don't know the type of the operand, you can still do this, but you
                    174: must use @code{typeof} (@pxref{Typeof}) or type naming (@pxref{Naming
                    175: Types}).
                    176: 
                    177: @node Local Labels
                    178: @section Locally Declared Labels
                    179: @cindex local labels
                    180: @cindex macros, local labels
                    181: 
                    182: Each statement expression is a scope in which @dfn{local labels} can be
                    183: declared.  A local label is simply an identifier; you can jump to it
                    184: with an ordinary @code{goto} statement, but only from within the
                    185: statement expression it belongs to.
                    186: 
                    187: A local label declaration looks like this:
                    188: 
                    189: @example
                    190: __label__ @var{label};
                    191: @end example
                    192: 
                    193: @noindent
                    194: or
                    195: 
                    196: @example
                    197: __label__ @var{label1}, @var{label2}, @dots{};
                    198: @end example
                    199: 
                    200: Local label declarations must come at the beginning of the statement
                    201: expression, right after the @samp{(@{}, before any ordinary
                    202: declarations.
                    203: 
                    204: The label declaration defines the label @emph{name}, but does not define
                    205: the label itself.  You must do this in the usual way, with
                    206: @code{@var{label}:}, within the statements of the statement expression.
                    207: 
                    208: The local label feature is useful because statement expressions are
                    209: often used in macros.  If the macro contains nested loops, a @code{goto}
                    210: can be useful for breaking out of them.  However, an ordinary label
                    211: whose scope is the whole function cannot be used: if the macro can be
                    212: expanded several times in one function, the label will be multiply
                    213: defined in that function.  A local label avoids this problem.  For
                    214: example:
                    215: 
                    216: @example
                    217: #define SEARCH(array, target)                     \
                    218: (@{                                               \
                    219:   __label__ found;                                \
                    220:   typeof (target) _SEARCH_target = (target);      \
                    221:   typeof (*(array)) *_SEARCH_array = (array);     \
                    222:   int i, j;                                       \
                    223:   int value;                                      \
                    224:   for (i = 0; i < max; i++)                       \
                    225:     for (j = 0; j < max; j++)                     \
                    226:       if (_SEARCH_array[i][j] == _SEARCH_target)  \
                    227:         @{ value = i; goto found; @}              \
                    228:   value = -1;                                     \
                    229:  found:                                           \
                    230:   value;                                          \
                    231: @})
                    232: @end example
                    233: 
                    234: @node Labels as Values
                    235: @section Labels as Values
                    236: @cindex labels as values
                    237: @cindex computed gotos
                    238: @cindex goto with computed label 
                    239: @cindex address of a label
                    240: 
                    241: You can get the address of a label defined in the current function
                    242: (or a containing function) with the unary operator @samp{&&}.  The
                    243: value has type @code{void *}.  This value is a constant and can be used 
                    244: wherever a constant of that type is valid.  For example:
                    245: 
                    246: @example
                    247: void *ptr;
                    248: @dots{}
                    249: ptr = &&foo;
                    250: @end example
                    251: 
                    252: To use these values, you need to be able to jump to one.  This is done
                    253: with the computed goto statement@footnote{The analogous feature in
                    254: Fortran is called an assigned goto, but that name seems inappropriate in
                    255: C, where one can do more than simply store label addresses in label
                    256: variables.}, @code{goto *@var{exp};}.  For example,
                    257: 
                    258: @example
                    259: goto *ptr;
                    260: @end example
                    261: 
                    262: @noindent
                    263: Any expression of type @code{void *} is allowed.
                    264: 
                    265: One way of using these constants is in initializing a static array that
                    266: will serve as a jump table:
                    267: 
                    268: @example
                    269: static void *array[] = @{ &&foo, &&bar, &&hack @};
                    270: @end example
                    271: 
                    272: Then you can select a label with indexing, like this:
                    273: 
                    274: @example
                    275: goto *array[i];
                    276: @end example
                    277: 
                    278: @noindent
                    279: Note that this does not check whether the subscript is in bounds---array
                    280: indexing in C never does that.
                    281: 
                    282: Such an array of label values serves a purpose much like that of the
                    283: @code{switch} statement.  The @code{switch} statement is cleaner, so
                    284: use that rather than an array unless the problem does not fit a
                    285: @code{switch} statement very well.
                    286: 
                    287: Another use of label values is in an interpreter for threaded code.
                    288: The labels within the interpreter function can be stored in the
                    289: threaded code for super-fast dispatching.  
                    290: 
1.1.1.3   root      291: You can use this mechanism to jump to code in a different function.  If
                    292: you do that, totally unpredictable things will happen.  The best way to
                    293: avoid this is to store the label address only in automatic variables and
                    294: never pass it as an argument.
                    295: 
1.1       root      296: @node Nested Functions
                    297: @section Nested Functions
                    298: @cindex nested functions
                    299: @cindex downward funargs
                    300: @cindex thunks
                    301: 
                    302: A @dfn{nested function} is a function defined inside another function.
1.1.1.5   root      303: (Nested functions are not supported for GNU C++.)  The nested function's
                    304: name is local to the block where it is defined.  For example, here we
                    305: define a nested function named @code{square}, and call it twice:
1.1       root      306: 
                    307: @example
1.1.1.5   root      308: @group
1.1       root      309: foo (double a, double b)
                    310: @{
                    311:   double square (double z) @{ return z * z; @}
                    312: 
                    313:   return square (a) + square (b);
                    314: @}
1.1.1.5   root      315: @end group
1.1       root      316: @end example
                    317: 
                    318: The nested function can access all the variables of the containing
                    319: function that are visible at the point of its definition.  This is
                    320: called @dfn{lexical scoping}.  For example, here we show a nested
                    321: function which uses an inherited variable named @code{offset}:
                    322: 
                    323: @example
                    324: bar (int *array, int offset, int size)
                    325: @{
                    326:   int access (int *array, int index)
                    327:     @{ return array[index + offset]; @}
                    328:   int i;
                    329:   @dots{}
                    330:   for (i = 0; i < size; i++)
                    331:     @dots{} access (array, i) @dots{}
                    332: @}
                    333: @end example
                    334: 
1.1.1.5   root      335: Nested function definitions are permitted within functions in the places
                    336: where variable definitions are allowed; that is, in any block, before
                    337: the first statement in the block.
                    338: 
1.1       root      339: It is possible to call the nested function from outside the scope of its
                    340: name by storing its address or passing the address to another function:
                    341: 
                    342: @example
                    343: hack (int *array, int size)
                    344: @{
                    345:   void store (int index, int value)
                    346:     @{ array[index] = value; @}
                    347: 
                    348:   intermediate (store, size);
                    349: @}
                    350: @end example
                    351: 
                    352: Here, the function @code{intermediate} receives the address of
1.1.1.6   root      353: @code{store} as an argument.  If @code{intermediate} calls @code{store},
                    354: the arguments given to @code{store} are used to store into @code{array}.
                    355: But this technique works only so long as the containing function
                    356: (@code{hack}, in this example) does not exit.
                    357: 
                    358: If you try to call the nested function through its address after the
                    359: containing function has exited, all hell will break loose.  If you try
                    360: to call it after a containing scope level has exited, and if it refers
                    361: to some of the variables that are no longer in scope, you may be lucky,
                    362: but it's not wise to take the risk.  If, however, the nested function
                    363: does not refer to anything that has gone out of scope, you should be
                    364: safe.
1.1       root      365: 
1.1.1.4   root      366: GNU CC implements taking the address of a nested function using a
                    367: technique called @dfn{trampolines}.  A paper describing them is
1.1.1.5   root      368: available from @samp{maya.idiap.ch} in directory @file{pub/tmb},
                    369: file @file{usenix88-lexic.ps.Z}.
1.1.1.4   root      370: 
1.1       root      371: A nested function can jump to a label inherited from a containing
                    372: function, provided the label was explicitly declared in the containing
                    373: function (@pxref{Local Labels}).  Such a jump returns instantly to the
                    374: containing function, exiting the nested function which did the
                    375: @code{goto} and any intermediate functions as well.  Here is an example:
                    376: 
                    377: @example
1.1.1.5   root      378: @group
1.1       root      379: bar (int *array, int offset, int size)
                    380: @{
                    381:   __label__ failure;
                    382:   int access (int *array, int index)
                    383:     @{
                    384:       if (index > size)
                    385:         goto failure;
                    386:       return array[index + offset];
                    387:     @}
                    388:   int i;
                    389:   @dots{}
                    390:   for (i = 0; i < size; i++)
                    391:     @dots{} access (array, i) @dots{}
                    392:   @dots{}
                    393:   return 0;
                    394: 
                    395:  /* @r{Control comes here from @code{access}
                    396:     if it detects an error.}  */
                    397:  failure:
                    398:   return -1;
                    399: @}
1.1.1.5   root      400: @end group
1.1       root      401: @end example
                    402: 
                    403: A nested function always has internal linkage.  Declaring one with
                    404: @code{extern} is erroneous.  If you need to declare the nested function
                    405: before its definition, use @code{auto} (which is otherwise meaningless
                    406: for function declarations).
                    407: 
                    408: @example
                    409: bar (int *array, int offset, int size)
                    410: @{
                    411:   __label__ failure;
                    412:   auto int access (int *, int);
                    413:   @dots{}
                    414:   int access (int *array, int index)
                    415:     @{
                    416:       if (index > size)
                    417:         goto failure;
                    418:       return array[index + offset];
                    419:     @}
                    420:   @dots{}
                    421: @}
                    422: @end example
                    423: 
1.1.1.5   root      424: @node Constructing Calls
                    425: @section Constructing Function Calls
                    426: @cindex constructing calls
                    427: @cindex forwarding calls
                    428: 
                    429: Using the built-in functions described below, you can record
                    430: the arguments a function received, and call another function
                    431: with the same arguments, without knowing the number or types
                    432: of the arguments.
                    433: 
                    434: You can also record the return value of that function call,
                    435: and later return that value, without knowing what data type
                    436: the function tried to return (as long as your caller expects
                    437: that data type).
                    438: 
                    439: @table @code
                    440: @findex __builtin_apply_args
                    441: @item __builtin_apply_args ()
                    442: This built-in function returns a pointer of type @code{void *} to data
                    443: describing how to perform a call with the same arguments as were passed
                    444: to the current function.
                    445: 
                    446: The function saves the arg pointer register, structure value address,
                    447: and all registers that might be used to pass arguments to a function
                    448: into a block of memory allocated on the stack.  Then it returns the
                    449: address of that block.
                    450: 
                    451: @findex __builtin_apply
                    452: @item __builtin_apply (@var{function}, @var{arguments}, @var{size})
                    453: This built-in function invokes @var{function} (type @code{void (*)()})
                    454: with a copy of the parameters described by @var{arguments} (type
                    455: @code{void *}) and @var{size} (type @code{int}).
                    456: 
                    457: The value of @var{arguments} should be the value returned by
                    458: @code{__builtin_apply_args}.  The argument @var{size} specifies the size
                    459: of the stack argument data, in bytes.
                    460: 
                    461: This function returns a pointer of type @code{void *} to data describing
                    462: how to return whatever value was returned by @var{function}.  The data
                    463: is saved in a block of memory allocated on the stack.
                    464: 
                    465: It is not always simple to compute the proper value for @var{size}.  The
                    466: value is used by @code{__builtin_apply} to compute the amount of data
                    467: that should be pushed on the stack and copied from the incoming argument
                    468: area.
                    469: 
                    470: @findex __builtin_return
                    471: @item __builtin_return (@var{result})
                    472: This built-in function returns the value described by @var{result} from
                    473: the containing function.  You should specify, for @var{result}, a value
                    474: returned by @code{__builtin_apply}.
                    475: @end table
                    476: 
1.1       root      477: @node Naming Types
                    478: @section Naming an Expression's Type
                    479: @cindex naming types
                    480: 
                    481: You can give a name to the type of an expression using a @code{typedef}
                    482: declaration with an initializer.  Here is how to define @var{name} as a
                    483: type name for the type of @var{exp}:
                    484: 
                    485: @example
                    486: typedef @var{name} = @var{exp};
                    487: @end example
                    488: 
                    489: This is useful in conjunction with the statements-within-expressions
                    490: feature.  Here is how the two together can be used to define a safe
                    491: ``maximum'' macro that operates on any arithmetic type:
                    492: 
                    493: @example
                    494: #define max(a,b) \
                    495:   (@{typedef _ta = (a), _tb = (b);  \
                    496:     _ta _a = (a); _tb _b = (b);     \
                    497:     _a > _b ? _a : _b; @})
                    498: @end example
                    499: 
                    500: @cindex underscores in variables in macros
                    501: @cindex @samp{_} in variables in macros
                    502: @cindex local variables in macros
                    503: @cindex variables, local, in macros
                    504: @cindex macros, local variables in
                    505: 
                    506: The reason for using names that start with underscores for the local
                    507: variables is to avoid conflicts with variable names that occur within the
                    508: expressions that are substituted for @code{a} and @code{b}.  Eventually we
                    509: hope to design a new form of declaration syntax that allows you to declare
                    510: variables whose scopes start only after their initializers; this will be a
                    511: more reliable way to prevent such conflicts.
                    512: 
                    513: @node Typeof
                    514: @section Referring to a Type with @code{typeof}
                    515: @findex typeof
                    516: @findex sizeof
                    517: @cindex macros, types of arguments
                    518: 
                    519: Another way to refer to the type of an expression is with @code{typeof}.
                    520: The syntax of using of this keyword looks like @code{sizeof}, but the
                    521: construct acts semantically like a type name defined with @code{typedef}.
                    522: 
                    523: There are two ways of writing the argument to @code{typeof}: with an
                    524: expression or with a type.  Here is an example with an expression:
                    525: 
                    526: @example
                    527: typeof (x[0](1))
                    528: @end example
                    529: 
                    530: @noindent
                    531: This assumes that @code{x} is an array of functions; the type described
                    532: is that of the values of the functions.
                    533: 
                    534: Here is an example with a typename as the argument:
                    535: 
                    536: @example
                    537: typeof (int *)
                    538: @end example
                    539: 
                    540: @noindent
                    541: Here the type described is that of pointers to @code{int}.
                    542: 
                    543: If you are writing a header file that must work when included in ANSI C
                    544: programs, write @code{__typeof__} instead of @code{typeof}.
                    545: @xref{Alternate Keywords}.
                    546: 
                    547: A @code{typeof}-construct can be used anywhere a typedef name could be
                    548: used.  For example, you can use it in a declaration, in a cast, or inside
                    549: of @code{sizeof} or @code{typeof}.
                    550: 
                    551: @itemize @bullet
                    552: @item
                    553: This declares @code{y} with the type of what @code{x} points to.
                    554: 
                    555: @example
                    556: typeof (*x) y;
                    557: @end example
                    558: 
                    559: @item
                    560: This declares @code{y} as an array of such values.
                    561: 
                    562: @example
                    563: typeof (*x) y[4];
                    564: @end example
                    565: 
                    566: @item
                    567: This declares @code{y} as an array of pointers to characters:
                    568: 
                    569: @example
                    570: typeof (typeof (char *)[4]) y;
                    571: @end example
                    572: 
                    573: @noindent
                    574: It is equivalent to the following traditional C declaration:
                    575: 
                    576: @example
                    577: char *y[4];
                    578: @end example
                    579: 
                    580: To see the meaning of the declaration using @code{typeof}, and why it
                    581: might be a useful way to write, let's rewrite it with these macros:
                    582: 
                    583: @example
                    584: #define pointer(T)  typeof(T *)
                    585: #define array(T, N) typeof(T [N])
                    586: @end example
                    587: 
                    588: @noindent
                    589: Now the declaration can be rewritten this way:
                    590: 
                    591: @example
                    592: array (pointer (char), 4) y;
                    593: @end example
                    594: 
                    595: @noindent
                    596: Thus, @code{array (pointer (char), 4)} is the type of arrays of 4
                    597: pointers to @code{char}.
                    598: @end itemize
                    599: 
                    600: @node Lvalues
                    601: @section Generalized Lvalues
                    602: @cindex compound expressions as lvalues
                    603: @cindex expressions, compound, as lvalues
                    604: @cindex conditional expressions as lvalues
                    605: @cindex expressions, conditional, as lvalues
                    606: @cindex casts as lvalues
                    607: @cindex generalized lvalues
                    608: @cindex lvalues, generalized
                    609: @cindex extensions, @code{?:}
                    610: @cindex @code{?:} extensions
                    611: Compound expressions, conditional expressions and casts are allowed as
                    612: lvalues provided their operands are lvalues.  This means that you can take
                    613: their addresses or store values into them.
                    614: 
1.1.1.7   root      615: Standard C++ allows compound expressions and conditional expressions as
                    616: lvalues, and permits casts to reference type, so use of this extension
                    617: is deprecated for C++ code.
                    618: 
1.1       root      619: For example, a compound expression can be assigned, provided the last
                    620: expression in the sequence is an lvalue.  These two expressions are
                    621: equivalent:
                    622: 
                    623: @example
                    624: (a, b) += 5
                    625: a, (b += 5)
                    626: @end example
                    627: 
                    628: Similarly, the address of the compound expression can be taken.  These two
                    629: expressions are equivalent:
                    630: 
                    631: @example
                    632: &(a, b)
                    633: a, &b
                    634: @end example
                    635: 
                    636: A conditional expression is a valid lvalue if its type is not void and the
                    637: true and false branches are both valid lvalues.  For example, these two
                    638: expressions are equivalent:
                    639: 
                    640: @example
                    641: (a ? b : c) = 5
                    642: (a ? b = 5 : (c = 5))
                    643: @end example
                    644: 
                    645: A cast is a valid lvalue if its operand is an lvalue.  A simple
                    646: assignment whose left-hand side is a cast works by converting the
                    647: right-hand side first to the specified type, then to the type of the
                    648: inner left-hand side expression.  After this is stored, the value is
                    649: converted back to the specified type to become the value of the
                    650: assignment.  Thus, if @code{a} has type @code{char *}, the following two
                    651: expressions are equivalent:
                    652: 
                    653: @example
                    654: (int)a = 5
                    655: (int)(a = (char *)(int)5)
                    656: @end example
                    657: 
                    658: An assignment-with-arithmetic operation such as @samp{+=} applied to a cast
                    659: performs the arithmetic using the type resulting from the cast, and then
                    660: continues as in the previous case.  Therefore, these two expressions are
                    661: equivalent:
                    662: 
                    663: @example
                    664: (int)a += 5
                    665: (int)(a = (char *)(int) ((int)a + 5))
                    666: @end example
                    667: 
                    668: You cannot take the address of an lvalue cast, because the use of its
                    669: address would not work out coherently.  Suppose that @code{&(int)f} were
                    670: permitted, where @code{f} has type @code{float}.  Then the following
                    671: statement would try to store an integer bit-pattern where a floating
                    672: point number belongs:
                    673: 
                    674: @example
                    675: *&(int)f = 1;
                    676: @end example
                    677: 
                    678: This is quite different from what @code{(int)f = 1} would do---that
                    679: would convert 1 to floating point and store it.  Rather than cause this
1.1.1.2   root      680: inconsistency, we think it is better to prohibit use of @samp{&} on a cast.
1.1       root      681: 
                    682: If you really do want an @code{int *} pointer with the address of
                    683: @code{f}, you can simply write @code{(int *)&f}.
                    684: 
                    685: @node Conditionals
1.1.1.5   root      686: @section Conditionals with Omitted Operands
1.1       root      687: @cindex conditional expressions, extensions
                    688: @cindex omitted middle-operands
                    689: @cindex middle-operands, omitted
                    690: @cindex extensions, @code{?:}
                    691: @cindex @code{?:} extensions
                    692: 
                    693: The middle operand in a conditional expression may be omitted.  Then
                    694: if the first operand is nonzero, its value is the value of the conditional
                    695: expression.
                    696: 
                    697: Therefore, the expression
                    698: 
                    699: @example
                    700: x ? : y
                    701: @end example
                    702: 
                    703: @noindent
                    704: has the value of @code{x} if that is nonzero; otherwise, the value of
                    705: @code{y}.
                    706: 
                    707: This example is perfectly equivalent to
                    708: 
                    709: @example
                    710: x ? x : y
                    711: @end example
                    712: 
                    713: @cindex side effect in ?:
                    714: @cindex ?: side effect
                    715: @noindent
                    716: In this simple case, the ability to omit the middle operand is not
                    717: especially useful.  When it becomes useful is when the first operand does,
                    718: or may (if it is a macro argument), contain a side effect.  Then repeating
                    719: the operand in the middle would perform the side effect twice.  Omitting
                    720: the middle operand uses the value already computed without the undesirable
                    721: effects of recomputing it.
                    722: 
                    723: @node Long Long
                    724: @section Double-Word Integers
                    725: @cindex @code{long long} data types
                    726: @cindex double-word arithmetic
                    727: @cindex multiprecision arithmetic
                    728: 
                    729: GNU C supports data types for integers that are twice as long as
                    730: @code{long int}.  Simply write @code{long long int} for a signed
                    731: integer, or @code{unsigned long long int} for an unsigned integer.
1.1.1.5   root      732: To make an integer constant of type @code{long long int}, add the suffix
                    733: @code{LL} to the integer.  To make an integer constant of type
                    734: @code{unsigned long long int}, add the suffix @code{ULL} to the integer.
1.1       root      735: 
                    736: You can use these types in arithmetic like any other integer types.
                    737: Addition, subtraction, and bitwise boolean operations on these types
                    738: are open-coded on all types of machines.  Multiplication is open-coded
                    739: if the machine supports fullword-to-doubleword a widening multiply
                    740: instruction.  Division and shifts are open-coded only on machines that
                    741: provide special support.  The operations that are not open-coded use
                    742: special library routines that come with GNU CC.
                    743: 
                    744: There may be pitfalls when you use @code{long long} types for function
                    745: arguments, unless you declare function prototypes.  If a function
                    746: expects type @code{int} for its argument, and you pass a value of type
                    747: @code{long long int}, confusion will result because the caller and the
                    748: subroutine will disagree about the number of bytes for the argument.
                    749: Likewise, if the function expects @code{long long int} and you pass
                    750: @code{int}.  The best way to avoid such problems is to use prototypes.
                    751: 
1.1.1.6   root      752: @node Complex
                    753: @section Complex Numbers
                    754: @cindex complex numbers
                    755: 
                    756: GNU C supports complex data types.  You can declare both complex integer
                    757: types and complex floating types, using the keyword @code{__complex__}.
                    758: 
                    759: For example, @samp{__complex__ double x;} declares @code{x} as a
                    760: variable whose real part and imaginary part are both of type
                    761: @code{double}.  @samp{__complex__ short int y;} declares @code{y} to
                    762: have real and imaginary parts of type @code{short int}; this is not
                    763: likely to be useful, but it shows that the set of complex types is
                    764: complete.
                    765: 
                    766: To write a constant with a complex data type, use the suffix @samp{i} or
                    767: @samp{j} (either one; they are equivalent).  For example, @code{2.5fi}
                    768: has type @code{__complex__ float} and @code{3i} has type
                    769: @code{__complex__ int}.  Such a constant always has a pure imaginary
                    770: value, but you can form any complex value you like by adding one to a
                    771: real constant.
                    772: 
                    773: To extract the real part of a complex-valued expression @var{exp}, write
                    774: @code{__real__ @var{exp}}.  Likewise, use @code{__imag__} to
                    775: extract the imaginary part.
                    776: 
                    777: The operator @samp{~} performs complex conjugation when used on a value
                    778: with a complex type.
                    779: 
                    780: GNU CC can allocate complex automatic variables in a noncontiguous
                    781: fashion; it's even possible for the real part to be in a register while
                    782: the imaginary part is on the stack (or vice-versa).  None of the
                    783: supported debugging info formats has a way to represent noncontiguous
                    784: allocation like this, so GNU CC describes a noncontiguous complex
                    785: variable as if it were two separate variables of noncomplex type.
                    786: If the variable's actual name is @code{foo}, the two fictitious 
                    787: variables are named @code{foo$real} and @code{foo$imag}.  You can
                    788: examine and set these two fictitious variables with your debugger.
                    789: 
                    790: A future version of GDB will know how to recognize such pairs and treat
                    791: them as a single variable with a complex type.
                    792: 
1.1       root      793: @node Zero Length
                    794: @section Arrays of Length Zero
                    795: @cindex arrays of length zero
                    796: @cindex zero-length arrays
                    797: @cindex length-zero arrays
                    798: 
                    799: Zero-length arrays are allowed in GNU C.  They are very useful as the last
                    800: element of a structure which is really a header for a variable-length
                    801: object:
                    802: 
                    803: @example
                    804: struct line @{
                    805:   int length;
                    806:   char contents[0];
                    807: @};
                    808: 
                    809: @{
                    810:   struct line *thisline = (struct line *)
                    811:     malloc (sizeof (struct line) + this_length);
                    812:   thisline->length = this_length;
                    813: @}
                    814: @end example
                    815: 
                    816: In standard C, you would have to give @code{contents} a length of 1, which
                    817: means either you waste space or complicate the argument to @code{malloc}.
                    818: 
                    819: @node Variable Length
                    820: @section Arrays of Variable Length
                    821: @cindex variable-length arrays
                    822: @cindex arrays of variable length
                    823: 
                    824: Variable-length automatic arrays are allowed in GNU C.  These arrays are
                    825: declared like any other automatic arrays, but with a length that is not
                    826: a constant expression.  The storage is allocated at the point of
                    827: declaration and deallocated when the brace-level is exited.  For
                    828: example:
                    829: 
                    830: @example
                    831: FILE *
                    832: concat_fopen (char *s1, char *s2, char *mode)
                    833: @{
                    834:   char str[strlen (s1) + strlen (s2) + 1];
                    835:   strcpy (str, s1);
                    836:   strcat (str, s2);
                    837:   return fopen (str, mode);
                    838: @}
                    839: @end example
                    840: 
                    841: @cindex scope of a variable length array
                    842: @cindex variable-length array scope
                    843: @cindex deallocating variable length arrays
                    844: Jumping or breaking out of the scope of the array name deallocates the
                    845: storage.  Jumping into the scope is not allowed; you get an error
                    846: message for it.
                    847: 
                    848: @cindex @code{alloca} vs variable-length arrays
                    849: You can use the function @code{alloca} to get an effect much like
                    850: variable-length arrays.  The function @code{alloca} is available in
                    851: many other C implementations (but not in all).  On the other hand,
                    852: variable-length arrays are more elegant.
                    853: 
                    854: There are other differences between these two methods.  Space allocated
                    855: with @code{alloca} exists until the containing @emph{function} returns.
                    856: The space for a variable-length array is deallocated as soon as the array
                    857: name's scope ends.  (If you use both variable-length arrays and
                    858: @code{alloca} in the same function, deallocation of a variable-length array
                    859: will also deallocate anything more recently allocated with @code{alloca}.)
                    860: 
                    861: You can also use variable-length arrays as arguments to functions:
                    862: 
                    863: @example
                    864: struct entry
                    865: tester (int len, char data[len][len])
                    866: @{
                    867:   @dots{}
                    868: @}
                    869: @end example
                    870: 
                    871: The length of an array is computed once when the storage is allocated
                    872: and is remembered for the scope of the array in case you access it with
                    873: @code{sizeof}.
                    874: 
                    875: If you want to pass the array first and the length afterward, you can
                    876: use a forward declaration in the parameter list---another GNU extension.
                    877: 
                    878: @example
                    879: struct entry
                    880: tester (int len; char data[len][len], int len)
                    881: @{
                    882:   @dots{}
                    883: @}
                    884: @end example
                    885: 
                    886: @cindex parameter forward declaration
                    887: The @samp{int len} before the semicolon is a @dfn{parameter forward
                    888: declaration}, and it serves the purpose of making the name @code{len}
                    889: known when the declaration of @code{data} is parsed.
                    890: 
                    891: You can write any number of such parameter forward declarations in the
                    892: parameter list.  They can be separated by commas or semicolons, but the
                    893: last one must end with a semicolon, which is followed by the ``real''
                    894: parameter declarations.  Each forward declaration must match a ``real''
                    895: declaration in parameter name and data type.
                    896: 
1.1.1.3   root      897: @node Macro Varargs
                    898: @section Macros with Variable Numbers of Arguments
                    899: @cindex variable number of arguments
                    900: @cindex macro with variable arguments
                    901: @cindex rest argument (in macro)
                    902: 
                    903: In GNU C, a macro can accept a variable number of arguments, much as a
                    904: function can.  The syntax for defining the macro looks much like that
                    905: used for a function.  Here is an example:
                    906: 
                    907: @example
                    908: #define eprintf(format, args...)  \
1.1.1.5   root      909:  fprintf (stderr, format , ## args)
1.1.1.3   root      910: @end example
                    911: 
                    912: Here @code{args} is a @dfn{rest argument}: it takes in zero or more
                    913: arguments, as many as the call contains.  All of them plus the commas
                    914: between them form the value of @code{args}, which is substituted into
1.1.1.5   root      915: the macro body where @code{args} is used.  Thus, we have this expansion:
1.1.1.3   root      916: 
                    917: @example
                    918: eprintf ("%s:%d: ", input_file_name, line_number)
                    919: @expansion{}
1.1.1.5   root      920: fprintf (stderr, "%s:%d: " , input_file_name, line_number)
1.1.1.3   root      921: @end example
                    922: 
                    923: @noindent
                    924: Note that the comma after the string constant comes from the definition
                    925: of @code{eprintf}, whereas the last comma comes from the value of
                    926: @code{args}.
                    927: 
                    928: The reason for using @samp{##} is to handle the case when @code{args}
                    929: matches no arguments at all.  In this case, @code{args} has an empty
                    930: value.  In this case, the second comma in the definition becomes an
                    931: embarrassment: if it got through to the expansion of the macro, we would
                    932: get something like this:
                    933: 
                    934: @example
1.1.1.5   root      935: fprintf (stderr, "success!\n" , )
1.1.1.3   root      936: @end example
                    937: 
                    938: @noindent
                    939: which is invalid C syntax.  @samp{##} gets rid of the comma, so we get
                    940: the following instead:
                    941: 
                    942: @example
                    943: fprintf (stderr, "success!\n")
                    944: @end example
                    945: 
1.1.1.5   root      946: This is a special feature of the GNU C preprocessor: @samp{##} before a
                    947: rest argument that is empty discards the preceding sequence of
                    948: non-whitespace characters from the macro definition.  (If another macro
                    949: argument precedes, none of it is discarded.)
                    950: 
                    951: It might be better to discard the last preprocessor token instead of the
                    952: last preceding sequence of non-whitespace characters; in fact, we may
                    953: someday change this feature to do so.  We advise you to write the macro
                    954: definition so that the preceding sequence of non-whitespace characters
                    955: is just a single token, so that the meaning will not change if we change
                    956: the definition of this feature.
1.1.1.3   root      957: 
1.1       root      958: @node Subscripting
                    959: @section Non-Lvalue Arrays May Have Subscripts
                    960: @cindex subscripting
                    961: @cindex arrays, non-lvalue
                    962: 
                    963: @cindex subscripting and function values
                    964: Subscripting is allowed on arrays that are not lvalues, even though the
                    965: unary @samp{&} operator is not.  For example, this is valid in GNU C though
                    966: not valid in other C dialects:
                    967: 
                    968: @example
1.1.1.5   root      969: @group
1.1       root      970: struct foo @{int a[4];@};
                    971: 
                    972: struct foo f();
                    973: 
                    974: bar (int index)
                    975: @{
                    976:   return f().a[index];
                    977: @}
1.1.1.5   root      978: @end group
1.1       root      979: @end example
                    980: 
                    981: @node Pointer Arith
                    982: @section Arithmetic on @code{void}- and Function-Pointers
                    983: @cindex void pointers, arithmetic
                    984: @cindex void, size of pointer to
                    985: @cindex function pointers, arithmetic
                    986: @cindex function, size of pointer to
                    987: 
                    988: In GNU C, addition and subtraction operations are supported on pointers to
                    989: @code{void} and on pointers to functions.  This is done by treating the
                    990: size of a @code{void} or of a function as 1.
                    991: 
                    992: A consequence of this is that @code{sizeof} is also allowed on @code{void}
                    993: and on function types, and returns 1.
                    994: 
                    995: The option @samp{-Wpointer-arith} requests a warning if these extensions
                    996: are used.
                    997: 
                    998: @node Initializers
                    999: @section Non-Constant Initializers
                   1000: @cindex initializers, non-constant
                   1001: @cindex non-constant initializers
                   1002: 
1.1.1.7   root     1003: As in standard C++, the elements of an aggregate initializer for an
                   1004: automatic variable are not required to be constant expressions in GNU C.
                   1005: Here is an example of an initializer with run-time varying elements:
1.1       root     1006: 
                   1007: @example
                   1008: foo (float f, float g)
                   1009: @{
                   1010:   float beat_freqs[2] = @{ f-g, f+g @};
                   1011:   @dots{}
                   1012: @}
                   1013: @end example
                   1014: 
                   1015: @node Constructors
                   1016: @section Constructor Expressions
                   1017: @cindex constructor expressions
                   1018: @cindex initializations in expressions
                   1019: @cindex structures, constructor expression
                   1020: @cindex expressions, constructor 
                   1021: 
                   1022: GNU C supports constructor expressions.  A constructor looks like
                   1023: a cast containing an initializer.  Its value is an object of the
                   1024: type specified in the cast, containing the elements specified in
                   1025: the initializer.
                   1026: 
                   1027: Usually, the specified type is a structure.  Assume that
                   1028: @code{struct foo} and @code{structure} are declared as shown:
                   1029: 
                   1030: @example
                   1031: struct foo @{int a; char b[2];@} structure;
                   1032: @end example
                   1033: 
                   1034: @noindent
                   1035: Here is an example of constructing a @code{struct foo} with a constructor:
                   1036: 
                   1037: @example
                   1038: structure = ((struct foo) @{x + y, 'a', 0@});
                   1039: @end example
                   1040: 
                   1041: @noindent
                   1042: This is equivalent to writing the following:
                   1043: 
                   1044: @example
                   1045: @{
                   1046:   struct foo temp = @{x + y, 'a', 0@};
                   1047:   structure = temp;
                   1048: @}
                   1049: @end example
                   1050: 
                   1051: You can also construct an array.  If all the elements of the constructor
                   1052: are (made up of) simple constant expressions, suitable for use in
                   1053: initializers, then the constructor is an lvalue and can be coerced to a
                   1054: pointer to its first element, as shown here:
                   1055: 
                   1056: @example
                   1057: char **foo = (char *[]) @{ "x", "y", "z" @};
                   1058: @end example
                   1059: 
                   1060: Array constructors whose elements are not simple constants are
                   1061: not very useful, because the constructor is not an lvalue.  There
                   1062: are only two valid ways to use it: to subscript it, or initialize
                   1063: an array variable with it.  The former is probably slower than a
                   1064: @code{switch} statement, while the latter does the same thing an
                   1065: ordinary C initializer would do.  Here is an example of
                   1066: subscripting an array constructor:
                   1067: 
                   1068: @example
                   1069: output = ((int[]) @{ 2, x, 28 @}) [input];
                   1070: @end example
                   1071: 
                   1072: Constructor expressions for scalar types and union types are is
                   1073: also allowed, but then the constructor expression is equivalent
                   1074: to a cast.
                   1075: 
                   1076: @node Labeled Elements
                   1077: @section Labeled Elements in Initializers
                   1078: @cindex initializers with labeled elements
                   1079: @cindex labeled elements in initializers
                   1080: @cindex case labels in initializers
                   1081: 
                   1082: Standard C requires the elements of an initializer to appear in a fixed
                   1083: order, the same as the order of the elements in the array or structure
                   1084: being initialized.
                   1085: 
                   1086: In GNU C you can give the elements in any order, specifying the array
1.1.1.7   root     1087: indices or structure field names they apply to.  This extension is not
                   1088: implemented in GNU C++.
1.1       root     1089: 
1.1.1.7   root     1090: To specify an array index, write @samp{[@var{index}]} or
                   1091: @samp{[@var{index}] =} before the element value.  For example,
1.1       root     1092: 
                   1093: @example
1.1.1.7   root     1094: int a[6] = @{ [4] 29, [2] = 15 @};
1.1       root     1095: @end example
                   1096: 
                   1097: @noindent
                   1098: is equivalent to
                   1099: 
                   1100: @example
                   1101: int a[6] = @{ 0, 0, 15, 0, 29, 0 @};
                   1102: @end example
                   1103: 
                   1104: @noindent
                   1105: The index values must be constant expressions, even if the array being
                   1106: initialized is automatic.
                   1107: 
1.1.1.7   root     1108: To initialize a range of elements to the same value, write
                   1109: @samp{[@var{first} ... @var{last}] = @var{value}}.  For example,
                   1110: 
                   1111: @example
                   1112: int widths[] = @{ [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 @};
                   1113: @end example
                   1114: 
                   1115: @noindent
                   1116: Note that the length of the array is the highest value specified
                   1117: plus one.
                   1118: 
1.1       root     1119: In a structure initializer, specify the name of a field to initialize
                   1120: with @samp{@var{fieldname}:} before the element value.  For example,
                   1121: given the following structure, 
                   1122: 
                   1123: @example
                   1124: struct point @{ int x, y; @};
                   1125: @end example
                   1126: 
                   1127: @noindent
                   1128: the following initialization
                   1129: 
                   1130: @example
                   1131: struct point p = @{ y: yvalue, x: xvalue @};
                   1132: @end example
                   1133: 
                   1134: @noindent
                   1135: is equivalent to
                   1136: 
                   1137: @example
                   1138: struct point p = @{ xvalue, yvalue @};
                   1139: @end example
                   1140: 
1.1.1.6   root     1141: Another syntax which has the same meaning is @samp{.@var{fieldname} =}.,
                   1142: as shown here:
                   1143: 
                   1144: @example
                   1145: struct point p = @{ .y = yvalue, .x = xvalue @};
                   1146: @end example
                   1147: 
                   1148: You can also use an element label (with either the colon syntax or the
                   1149: period-equal syntax) when initializing a union, to specify which element
                   1150: of the union should be used.  For example,
1.1       root     1151: 
                   1152: @example
                   1153: union foo @{ int i; double d; @};
                   1154: 
                   1155: union foo f = @{ d: 4 @};
                   1156: @end example
                   1157: 
                   1158: @noindent
                   1159: will convert 4 to a @code{double} to store it in the union using
                   1160: the second element.  By contrast, casting 4 to type @code{union foo}
                   1161: would store it into the union as the integer @code{i}, since it is
                   1162: an integer.  (@xref{Cast to Union}.)
                   1163: 
                   1164: You can combine this technique of naming elements with ordinary C
                   1165: initialization of successive elements.  Each initializer element that
                   1166: does not have a label applies to the next consecutive element of the
                   1167: array or structure.  For example,
                   1168: 
                   1169: @example
1.1.1.6   root     1170: int a[6] = @{ [1] = v1, v2, [4] = v4 @};
1.1       root     1171: @end example
                   1172: 
                   1173: @noindent
                   1174: is equivalent to
                   1175: 
                   1176: @example
                   1177: int a[6] = @{ 0, v1, v2, 0, v4, 0 @};
                   1178: @end example
                   1179: 
                   1180: Labeling the elements of an array initializer is especially useful
                   1181: when the indices are characters or belong to an @code{enum} type.
                   1182: For example:
                   1183: 
                   1184: @example
                   1185: int whitespace[256]
1.1.1.6   root     1186:   = @{ [' '] = 1, ['\t'] = 1, ['\h'] = 1,
                   1187:       ['\f'] = 1, ['\n'] = 1, ['\r'] = 1 @};
1.1       root     1188: @end example
                   1189: 
                   1190: @node Case Ranges
                   1191: @section Case Ranges
                   1192: @cindex case ranges
                   1193: @cindex ranges in case statements
                   1194: 
                   1195: You can specify a range of consecutive values in a single @code{case} label,
                   1196: like this:
                   1197: 
                   1198: @example
                   1199: case @var{low} ... @var{high}:
                   1200: @end example
                   1201: 
                   1202: @noindent
                   1203: This has the same effect as the proper number of individual @code{case}
                   1204: labels, one for each integer value from @var{low} to @var{high}, inclusive.
                   1205: 
                   1206: This feature is especially useful for ranges of ASCII character codes:
                   1207: 
                   1208: @example
                   1209: case 'A' ... 'Z':
                   1210: @end example
                   1211: 
                   1212: @strong{Be careful:} Write spaces around the @code{...}, for otherwise
                   1213: it may be parsed wrong when you use it with integer values.  For example,
                   1214: write this:
                   1215: 
                   1216: @example
                   1217: case 1 ... 5:
                   1218: @end example
                   1219: 
                   1220: @noindent 
                   1221: rather than this:
                   1222: 
                   1223: @example
                   1224: case 1...5:
                   1225: @end example
                   1226: 
                   1227: @node Cast to Union
                   1228: @section Cast to a Union Type
                   1229: @cindex cast to a union
                   1230: @cindex union, casting to a 
                   1231: 
1.1.1.5   root     1232: A cast to union type is similar to other casts, except that the type
1.1       root     1233: specified is a union type.  You can specify the type either with
1.1.1.5   root     1234: @code{union @var{tag}} or with a typedef name.  A cast to union is actually
                   1235: a constructor though, not a cast, and hence does not yield an lvalue like
                   1236: normal casts.  (@xref{Constructors}.)
1.1       root     1237: 
                   1238: The types that may be cast to the union type are those of the members
                   1239: of the union.  Thus, given the following union and variables:
                   1240: 
                   1241: @example
                   1242: union foo @{ int i; double d; @};
                   1243: int x;
                   1244: double y;
                   1245: @end example
                   1246: 
                   1247: @noindent
                   1248: both @code{x} and @code{y} can be cast to type @code{union} foo.
                   1249: 
                   1250: Using the cast as the right-hand side of an assignment to a variable of
                   1251: union type is equivalent to storing in a member of the union:
                   1252: 
                   1253: @example
                   1254: union foo u;
                   1255: @dots{}
                   1256: u = (union foo) x  @equiv{}  u.i = x
                   1257: u = (union foo) y  @equiv{}  u.d = y
                   1258: @end example
                   1259: 
                   1260: You can also use the union cast as a function argument:
                   1261: 
                   1262: @example
                   1263: void hack (union foo);
                   1264: @dots{}
                   1265: hack ((union foo) x);
                   1266: @end example
                   1267: 
                   1268: @node Function Attributes
                   1269: @section Declaring Attributes of Functions
                   1270: @cindex function attributes
                   1271: @cindex declaring attributes of functions
                   1272: @cindex functions that never return
                   1273: @cindex functions that have no side effects
1.1.1.7   root     1274: @cindex functions in arbitrary sections
1.1       root     1275: @cindex @code{volatile} applied to function
                   1276: @cindex @code{const} applied to function
1.1.1.6   root     1277: @cindex functions with @code{printf} or @code{scanf} style arguments
1.1.1.8 ! root     1278: @cindex functions that are passed arguments in registers on the 386
        !          1279: @cindex functions that pop the argument stack on the 386
        !          1280: @cindex functions that do not pop the argument stack on the 386
1.1       root     1281: 
                   1282: In GNU C, you declare certain things about functions called in your program
1.1.1.6   root     1283: which help the compiler optimize function calls and check your code more
                   1284: carefully.
                   1285: 
                   1286: The keyword @code{__attribute__} allows you to specify special
                   1287: attributes when making a declaration.  This keyword is followed by an
1.1.1.8 ! root     1288: attribute specification inside double parentheses.  Eight attributes,
        !          1289: @code{noreturn}, @code{const}, @code{format}, @code{section},
        !          1290: @code{constructor}, @code{destructor}, @code{unused} and @code{weak} are
        !          1291: currently defined for functions.  Other attributes, including
        !          1292: @code{section} are supported for variables declarations (@pxref{Variable
        !          1293: Attributes}) and for types (@pxref{Type Attributes}).
1.1       root     1294: 
1.1.1.8 ! root     1295: You may also specify attributes with @samp{__} preceding and following
1.1.1.7   root     1296: each keyword.  This allows you to use them in header files without
                   1297: being concerned about a possible macro of the same name.  For example,
                   1298: you may use @code{__noreturn__} instead of @code{noreturn}.
                   1299: 
1.1.1.6   root     1300: @table @code
                   1301: @cindex @code{noreturn} function attribute
                   1302: @item noreturn
1.1       root     1303: A few standard library functions, such as @code{abort} and @code{exit},
                   1304: cannot return.  GNU CC knows this automatically.  Some programs define
                   1305: their own functions that never return.  You can declare them
1.1.1.6   root     1306: @code{noreturn} to tell the compiler this fact.  For example,
1.1       root     1307: 
1.1.1.5   root     1308: @smallexample
1.1.1.6   root     1309: void fatal () __attribute__ ((noreturn));
1.1       root     1310: 
                   1311: void
                   1312: fatal (@dots{})
                   1313: @{
                   1314:   @dots{} /* @r{Print error message.} */ @dots{}
                   1315:   exit (1);
                   1316: @}
1.1.1.5   root     1317: @end smallexample
1.1       root     1318: 
1.1.1.6   root     1319: The @code{noreturn} keyword tells the compiler to assume that
                   1320: @code{fatal} cannot return.  It can then optimize without regard to what
                   1321: would happen if @code{fatal} ever did return.  This makes slightly
                   1322: better code.  More importantly, it helps avoid spurious warnings of
                   1323: uninitialized variables.
                   1324: 
                   1325: Do not assume that registers saved by the calling function are
                   1326: restored before calling the @code{noreturn} function.
1.1       root     1327: 
1.1.1.6   root     1328: It does not make sense for a @code{noreturn} function to have a return
1.1       root     1329: type other than @code{void}.
                   1330: 
1.1.1.6   root     1331: The attribute @code{noreturn} is not implemented in GNU C versions
                   1332: earlier than 2.5.  An alternative way to declare that a function does
                   1333: not return, which works in the current version and in some older
                   1334: versions, is as follows:
                   1335: 
                   1336: @smallexample  
                   1337: typedef void voidfn ();
                   1338: 
                   1339: volatile voidfn fatal;
                   1340: @end smallexample
                   1341: 
                   1342: @cindex @code{const} function attribute
                   1343: @item const
1.1       root     1344: Many functions do not examine any values except their arguments, and
                   1345: have no effects except the return value.  Such a function can be subject
                   1346: to common subexpression elimination and loop optimization just as an
                   1347: arithmetic operator would be.  These functions should be declared
1.1.1.6   root     1348: with the attribute @code{const}.  For example,
1.1       root     1349: 
1.1.1.5   root     1350: @smallexample
1.1.1.6   root     1351: int square (int) __attribute__ ((const));
1.1.1.5   root     1352: @end smallexample
1.1       root     1353: 
                   1354: @noindent
                   1355: says that the hypothetical function @code{square} is safe to call
                   1356: fewer times than the program says.
                   1357: 
1.1.1.6   root     1358: The attribute @code{const} is not implemented in GNU C versions earlier
                   1359: than 2.5.  An alternative way to declare that a function has no side
                   1360: effects, which works in the current version and in some older versions,
                   1361: is as follows:
                   1362: 
                   1363: @smallexample
                   1364: typedef int intfn ();
                   1365: 
                   1366: extern const intfn square;
                   1367: @end smallexample
                   1368: 
1.1.1.7   root     1369: This approach does not work in GNU C++ from 2.6.0 on, since the language
                   1370: specifies that the @samp{const} must be attached to the return value.
                   1371: 
1.1       root     1372: @cindex pointer arguments
                   1373: Note that a function that has pointer arguments and examines the data
                   1374: pointed to must @emph{not} be declared @code{const}.  Likewise, a
                   1375: function that calls a non-@code{const} function usually must not be
                   1376: @code{const}.  It does not make sense for a @code{const} function to
                   1377: return @code{void}.
                   1378: 
1.1.1.4   root     1379: @item format (@var{archetype}, @var{string-index}, @var{first-to-check})
1.1.1.6   root     1380: @cindex @code{format} function attribute
1.1.1.4   root     1381: The @code{format} attribute specifies that a function takes @code{printf}
                   1382: or @code{scanf} style arguments which should be type-checked against a
                   1383: format string.  For example, the declaration:
                   1384: 
1.1.1.5   root     1385: @smallexample
1.1.1.4   root     1386: extern int
                   1387: my_printf (void *my_object, const char *my_format, ...)
                   1388:       __attribute__ ((format (printf, 2, 3)));
1.1.1.5   root     1389: @end smallexample
1.1.1.4   root     1390: 
                   1391: @noindent
                   1392: causes the compiler to check the arguments in calls to @code{my_printf}
                   1393: for consistency with the @code{printf} style format string argument
                   1394: @code{my_format}.
                   1395: 
                   1396: The parameter @var{archetype} determines how the format string is
                   1397: interpreted, and should be either @code{printf} or @code{scanf}.  The
                   1398: parameter @var{string-index} specifies which argument is the format
                   1399: string argument (starting from 1), while @var{first-to-check} is the
                   1400: number of the first argument to check against the format string.  For
                   1401: functions where the arguments are not available to be checked (such as
                   1402: @code{vprintf}), specify the third parameter as zero.  In this case the
                   1403: compiler only checks the format string for consistency.
                   1404: 
                   1405: In the example above, the format string (@code{my_format}) is the second
                   1406: argument of the function @code{my_print}, and the arguments to check
                   1407: start with the third argument, so the correct parameters for the format
                   1408: attribute are 2 and 3.
                   1409: 
                   1410: The @code{format} attribute allows you to identify your own functions
                   1411: which take format strings as arguments, so that GNU CC can check the
                   1412: calls to these functions for errors.  The compiler always checks formats
                   1413: for the ANSI library functions @code{printf}, @code{fprintf},
                   1414: @code{sprintf}, @code{scanf}, @code{fscanf}, @code{sscanf},
                   1415: @code{vprintf}, @code{vfprintf} and @code{vsprintf} whenever such
                   1416: warnings are requested (using @samp{-Wformat}), so there is no need to
                   1417: modify the header file @file{stdio.h}.
1.1.1.7   root     1418: 
                   1419: @item section ("section-name")
                   1420: @cindex @code{section} function attribute
                   1421: Normally, the compiler places the code it generates in the @code{text} section.
                   1422: Sometimes, however, you need additional sections, or you need certain
                   1423: particular functions to appear in special sections.  The @code{section}
                   1424: attribute specifies that a function lives in a particular section.
                   1425: For example, the declaration:
                   1426: 
                   1427: @smallexample
1.1.1.8 ! root     1428: extern void foobar (void) __attribute__ ((section ("bar")));
1.1.1.7   root     1429: @end smallexample
                   1430: 
                   1431: @noindent
1.1.1.8 ! root     1432: puts the function @code{foobar} in the @code{bar} section.
1.1.1.7   root     1433: 
                   1434: Some file formats do not support arbitrary sections so the @code{section}
                   1435: attribute is not available on all platforms.
                   1436: If you need to map the entire contents of a module to a particular
                   1437: section, consider using the facilities of the linker instead.
1.1.1.8 ! root     1438: 
        !          1439: @item constructor
        !          1440: @itemx destructor
        !          1441: @cindex @code{constructor} function attribute
        !          1442: @cindex @code{destructor} function attribute
        !          1443: The @code{constructor} attribute causes the function to be called
        !          1444: automatically before execution enters @code{main ()}.  Similarly, the
        !          1445: @code{destructor} attribute causes the function to be called
        !          1446: automatically after @code{main ()} has completed or @code{exit ()} has
        !          1447: been called.  Functions with these attributes are useful for
        !          1448: initializing data that will be used implicitly during the execution of
        !          1449: the program.
        !          1450: 
        !          1451: These attributes are not currently implemented for Objective C.
        !          1452: 
        !          1453: @item unused
        !          1454: This attribute, attached to a function, means that the function is meant
        !          1455: to be possibly unused.  GNU CC will not produce a warning for this
        !          1456: function.
        !          1457: 
        !          1458: @item weak
        !          1459: @cindex @code{weak} attribute
        !          1460: The @code{weak} attribute causes the declaration to be emitted as a weak
        !          1461: symbol rather than a global.  This is primarily useful in defining
        !          1462: library functions which can be overridden in user code, though it can
        !          1463: also be used with non-function declarations.  Weak symbols are supported
        !          1464: for ELF targets, and also for a.out targets when using the GNU assembler
        !          1465: and linker.
        !          1466: 
        !          1467: @item alias ("target")
        !          1468: @cindex @code{alias} attribute
        !          1469: The @code{alias} attribute causes the declaration to be emitted as an
        !          1470: alias for another symbol, which must be specified.  For instance,
        !          1471: 
        !          1472: @smallexample
        !          1473: void __f () @{ /* do something */; @}
        !          1474: void f () __attribute__ ((weak, alias ("__f")));
        !          1475: @end smallexample
        !          1476: 
        !          1477: declares @samp{f} to be a weak alias for @samp{__f}.  In C++, the
        !          1478: mangled name for the target must be used.
        !          1479: 
        !          1480: @item regparm (@var{number})
        !          1481: @cindex functions that are passed arguments in registers on the 386
        !          1482: On the Intel 386, the @code{regparm} attribute causes the compiler to
        !          1483: pass up to @var{number} integer arguments in registers @var{EAX},
        !          1484: @var{EDX}, and @var{ECX} instead of on the stack.  Functions that take a
        !          1485: variable number of arguments will continue to be passed all of their
        !          1486: arguments on the stack.
        !          1487: 
        !          1488: @item stdcall
        !          1489: @cindex functions that pop the argument stack on the 386
        !          1490: On the Intel 386, the @code{stdcall} attribute causes the compiler to
        !          1491: assume that the called function will pop off the stack space used to
        !          1492: pass arguments, unless it takes a variable number of arguments.
        !          1493: 
        !          1494: @item cdecl
        !          1495: @cindex functions that do pop the argument stack on the 386
        !          1496: On the Intel 386, the @code{cdecl} attribute causes the compiler to
        !          1497: assume that the called function will pop off the stack space used to
        !          1498: pass arguments, unless it takes a variable number of arguments.  This is
        !          1499: useful to override the effects of the @samp{-mrtd} switch.
1.1.1.4   root     1500: @end table
                   1501: 
1.1.1.6   root     1502: You can specify multiple attributes in a declaration by separating them
1.1.1.7   root     1503: by commas within the double parentheses or by immediately following an
                   1504: attribute declaration with another attribute declaration.
1.1.1.6   root     1505: 
                   1506: @cindex @code{#pragma}, reason for not using
                   1507: @cindex pragma, reason for not using
                   1508: Some people object to the @code{__attribute__} feature, suggesting that ANSI C's
                   1509: @code{#pragma} should be used instead.  There are two reasons for not
                   1510: doing this.
                   1511: 
                   1512: @enumerate
                   1513: @item
                   1514: It is impossible to generate @code{#pragma} commands from a macro.
                   1515: 
                   1516: @item
                   1517: There is no telling what the same @code{#pragma} might mean in another
                   1518: compiler.
                   1519: @end enumerate
                   1520: 
                   1521: These two reasons apply to almost any application that might be proposed
                   1522: for @code{#pragma}.  It is basically a mistake to use @code{#pragma} for
                   1523: @emph{anything}.
                   1524: 
1.1.1.3   root     1525: @node Function Prototypes
                   1526: @section Prototypes and Old-Style Function Definitions
                   1527: @cindex function prototype declarations
                   1528: @cindex old-style function definitions
                   1529: @cindex promotion of formal parameters
                   1530: 
                   1531: GNU C extends ANSI C to allow a function prototype to override a later
                   1532: old-style non-prototype definition.  Consider the following example:
                   1533: 
                   1534: @example
                   1535: /* @r{Use prototypes unless the compiler is old-fashioned.}  */
                   1536: #if __STDC__
1.1.1.6   root     1537: #define P(x) x
1.1.1.3   root     1538: #else
1.1.1.4   root     1539: #define P(x) ()
1.1.1.3   root     1540: #endif
                   1541: 
                   1542: /* @r{Prototype function declaration.}  */
                   1543: int isroot P((uid_t));
                   1544: 
                   1545: /* @r{Old-style function definition.}  */
                   1546: int
                   1547: isroot (x)   /* ??? lossage here ??? */
                   1548:      uid_t x;
                   1549: @{
                   1550:   return x == 0;
                   1551: @}
                   1552: @end example
                   1553: 
                   1554: Suppose the type @code{uid_t} happens to be @code{short}.  ANSI C does
                   1555: not allow this example, because subword arguments in old-style
                   1556: non-prototype definitions are promoted.  Therefore in this example the
                   1557: function definition's argument is really an @code{int}, which does not
                   1558: match the prototype argument type of @code{short}.
                   1559: 
                   1560: This restriction of ANSI C makes it hard to write code that is portable
                   1561: to traditional C compilers, because the programmer does not know
                   1562: whether the @code{uid_t} type is @code{short}, @code{int}, or
                   1563: @code{long}.  Therefore, in cases like these GNU C allows a prototype
                   1564: to override a later old-style definition.  More precisely, in GNU C, a
                   1565: function prototype argument type overrides the argument type specified
                   1566: by a later old-style definition if the former type is the same as the
                   1567: latter type before promotion.  Thus in GNU C the above example is
                   1568: equivalent to the following:
                   1569: 
                   1570: @example
                   1571: int isroot (uid_t);
                   1572: 
                   1573: int
                   1574: isroot (uid_t x)
                   1575: @{
                   1576:   return x == 0;
                   1577: @}
                   1578: @end example
                   1579: 
1.1.1.7   root     1580: GNU C++ does not support old-style function definitions, so this
                   1581: extension is irrelevant.
                   1582: 
1.1.1.8 ! root     1583: @node C++ Comments
        !          1584: @section C++ Style Comments
        !          1585: @cindex //
        !          1586: @cindex C++ comments
        !          1587: @cindex comments, C++ style
        !          1588: 
        !          1589: In GNU C, you may use C++ style comments, which start with @samp{//} and
        !          1590: continue until the end of the line.  Many other C implementations allow
        !          1591: such comments, and they are likely to be in a future C standard.
        !          1592: However, C++ style comments are not recognized if you specify
        !          1593: @w{@samp{-ansi}} or @w{@samp{-traditional}}, since they are incompatible
        !          1594: with traditional constructs like @code{dividend//*comment*/divisor}.
        !          1595: 
1.1       root     1596: @node Dollar Signs
                   1597: @section Dollar Signs in Identifier Names
                   1598: @cindex $
                   1599: @cindex dollar signs in identifier names
                   1600: @cindex identifier names, dollar signs in
                   1601: 
                   1602: In GNU C, you may use dollar signs in identifier names.  This is because
                   1603: many traditional C implementations allow such identifiers.
                   1604: 
1.1.1.4   root     1605: On some machines, dollar signs are allowed in identifiers if you specify
                   1606: @w{@samp{-traditional}}.  On a few systems they are allowed by default,
                   1607: even if you do not use @w{@samp{-traditional}}.  But they are never
                   1608: allowed if you specify @w{@samp{-ansi}}.
1.1       root     1609: 
                   1610: There are certain ANSI C programs (obscure, to be sure) that would
                   1611: compile incorrectly if dollar signs were permitted in identifiers.  For
                   1612: example:
                   1613: 
                   1614: @example
                   1615: #define foo(a) #a
                   1616: #define lose(b) foo (b)
                   1617: #define test$
                   1618: lose (test)
                   1619: @end example
                   1620: 
                   1621: @node Character Escapes
                   1622: @section The Character @key{ESC} in Constants
                   1623: 
                   1624: You can use the sequence @samp{\e} in a string or character constant to
                   1625: stand for the ASCII character @key{ESC}.
                   1626: 
                   1627: @node Alignment
                   1628: @section Inquiring on Alignment of Types or Variables
                   1629: @cindex alignment
                   1630: @cindex type alignment
                   1631: @cindex variable alignment
                   1632: 
                   1633: The keyword @code{__alignof__} allows you to inquire about how an object
                   1634: is aligned, or the minimum alignment usually required by a type.  Its
                   1635: syntax is just like @code{sizeof}.
                   1636: 
                   1637: For example, if the target machine requires a @code{double} value to be
                   1638: aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
                   1639: This is true on many RISC machines.  On more traditional machine
                   1640: designs, @code{__alignof__ (double)} is 4 or even 2.
                   1641: 
                   1642: Some machines never actually require alignment; they allow reference to any
                   1643: data type even at an odd addresses.  For these machines, @code{__alignof__}
                   1644: reports the @emph{recommended} alignment of a type.
                   1645: 
                   1646: When the operand of @code{__alignof__} is an lvalue rather than a type, the
                   1647: value is the largest alignment that the lvalue is known to have.  It may
                   1648: have this alignment as a result of its data type, or because it is part of
1.1.1.5   root     1649: a structure and inherits alignment from that structure.  For example, after
1.1       root     1650: this declaration:
                   1651: 
                   1652: @example
                   1653: struct foo @{ int x; char y; @} foo1;
                   1654: @end example
                   1655: 
                   1656: @noindent
                   1657: the value of @code{__alignof__ (foo1.y)} is probably 2 or 4, the same as
                   1658: @code{__alignof__ (int)}, even though the data type of @code{foo1.y}
                   1659: does not itself demand any alignment.@refill
                   1660: 
1.1.1.4   root     1661: A related feature which lets you specify the alignment of an object is
                   1662: @code{__attribute__ ((aligned (@var{alignment})))}; see the following
                   1663: section.
                   1664: 
1.1       root     1665: @node Variable Attributes
                   1666: @section Specifying Attributes of Variables
                   1667: @cindex attribute of variables
                   1668: @cindex variable attributes
                   1669: 
                   1670: The keyword @code{__attribute__} allows you to specify special
1.1.1.4   root     1671: attributes of variables or structure fields.  This keyword is followed
1.1.1.8 ! root     1672: by an attribute specification inside double parentheses.  Eight
1.1.1.7   root     1673: attributes are currently defined for variables: @code{aligned},
1.1.1.8 ! root     1674: @code{mode}, @code{nocommon}, @code{packed}, @code{section},
        !          1675: @code{transparent_union}, @code{unused}, and @code{weak}.  Other
        !          1676: attributes are available for functions (@pxref{Function Attributes}) and
        !          1677: for types (@pxref{Type Attributes}).
1.1.1.7   root     1678: 
1.1.1.8 ! root     1679: You may also specify attributes with @samp{__} preceding and following
1.1.1.7   root     1680: each keyword.  This allows you to use them in header files without
                   1681: being concerned about a possible macro of the same name.  For example,
                   1682: you may use @code{__aligned__} instead of @code{aligned}.
1.1.1.4   root     1683: 
                   1684: @table @code
                   1685: @cindex @code{aligned} attribute
                   1686: @item aligned (@var{alignment})
1.1.1.5   root     1687: This attribute specifies a minimum alignment for the variable or
                   1688: structure field, measured in bytes.  For example, the declaration:
1.1       root     1689: 
1.1.1.5   root     1690: @smallexample
1.1       root     1691: int x __attribute__ ((aligned (16))) = 0;
1.1.1.5   root     1692: @end smallexample
1.1       root     1693: 
                   1694: @noindent
                   1695: causes the compiler to allocate the global variable @code{x} on a
1.1.1.4   root     1696: 16-byte boundary.  On a 68040, this could be used in conjunction with
1.1       root     1697: an @code{asm} expression to access the @code{move16} instruction which
                   1698: requires 16-byte aligned operands.
                   1699: 
                   1700: You can also specify the alignment of structure fields.  For example, to
                   1701: create a double-word aligned @code{int} pair, you could write:
                   1702: 
1.1.1.5   root     1703: @smallexample
1.1       root     1704: struct foo @{ int x[2] __attribute__ ((aligned (8))); @};
1.1.1.5   root     1705: @end smallexample
1.1       root     1706: 
                   1707: @noindent
                   1708: This is an alternative to creating a union with a @code{double} member
                   1709: that forces the union to be double-word aligned.
                   1710: 
                   1711: It is not possible to specify the alignment of functions; the alignment
                   1712: of functions is determined by the machine's requirements and cannot be
1.1.1.3   root     1713: changed.  You cannot specify alignment for a typedef name because such a
                   1714: name is just an alias, not a distinct type.
1.1       root     1715: 
1.1.1.8 ! root     1716: As in the preceding examples, you can explicitly specify the alignment
        !          1717: (in bytes) that you wish the compiler to use for a given variable or
        !          1718: structure field.  Alternatively, you can leave out the alignment factor
        !          1719: and just ask the compiler to align a variable or field to the maximum
        !          1720: useful alignment for the target machine you are compiling for.  For
        !          1721: example, you could write:
        !          1722: 
        !          1723: @smallexample
        !          1724: short array[3] __attribute__ ((aligned));
        !          1725: @end smallexample
        !          1726: 
        !          1727: Whenever you leave out the alignment factor in an @code{aligned} attribute
        !          1728: specification, the compiler automatically sets the alignment for the declared
        !          1729: variable or field to the largest alignment which is ever used for any data
        !          1730: type on the target machine you are compiling for.  Doing this can often make
        !          1731: copy operations more efficient, because the compiler can use whatever
        !          1732: instructions copy the biggest chunks of memory when performing copies to
        !          1733: or from the variables or fields that you have aligned this way.
        !          1734: 
1.1.1.5   root     1735: The @code{aligned} attribute can only increase the alignment; but you
                   1736: can decrease it by specifying @code{packed} as well.  See below.
                   1737: 
1.1.1.8 ! root     1738: Note that the effectiveness of @code{aligned} attributes may be limited
        !          1739: by inherent limitations in your linker.  On many systems, the linker is
        !          1740: only able to arrange for variables to be aligned up to a certain maximum
        !          1741: alignment.  (For some linkers, the maximum supported alignment may
        !          1742: be very very small.)  If your linker is only able to align variables
        !          1743: up to a maximum of 8 byte alignment, then specifying @code{aligned(16)}
        !          1744: in an @code{__attribute__} will still only provide you with 8 byte
        !          1745: alignment.  See your linker documentation for further information.
1.1.1.4   root     1746: 
                   1747: @item mode (@var{mode})
                   1748: @cindex @code{mode} attribute
                   1749: This attribute specifies the data type for the declaration---whichever
                   1750: type corresponds to the mode @var{mode}.  This in effect lets you
                   1751: request an integer or floating point type according to its width.
                   1752: 
1.1.1.8 ! root     1753: You may also specify a mode of @samp{byte} or @samp{__byte__} to
        !          1754: indicate the mode corresponding to a one-byte integer, @samp{word} or
        !          1755: @samp{__word__} for the mode of a one-word integer, and @samp{pointer}
        !          1756: or @samp{__pointer__} for the mode used to represent pointers.
        !          1757: 
        !          1758: @item nocommon
        !          1759: @cindex @code{nocommon} attribute
        !          1760: This attribute specifies requests GNU CC not to place a variable
        !          1761: ``common'' but instead to allocate space for it directly.  If you
        !          1762: specify the @samp{-fno-common} flag, GNU CC will do this for all
        !          1763: variables.
        !          1764: 
        !          1765: Specifying the @code{nocommon} attribute for a variable provides an
        !          1766: initialization of zeros.  A variable may only be initialized in one
        !          1767: source file.
        !          1768: 
1.1.1.4   root     1769: @item packed
                   1770: @cindex @code{packed} attribute
                   1771: The @code{packed} attribute specifies that a variable or structure field
                   1772: should have the smallest possible alignment---one byte for a variable,
                   1773: and one bit for a field, unless you specify a larger value with the
                   1774: @code{aligned} attribute.
1.1.1.7   root     1775: 
                   1776: Here is a structure in which the field @code{x} is packed, so that it
                   1777: immediately follows @code{a}:
                   1778: 
                   1779: @example
                   1780: struct foo
                   1781: @{
                   1782:   char a;
                   1783:   int x[2] __attribute__ ((packed));
                   1784: @};
                   1785: @end example
                   1786: 
                   1787: @item section ("section-name")
                   1788: @cindex @code{section} variable attribute
                   1789: Normally, the compiler places the objects it generates in sections like
                   1790: @code{data} and @code{bss}.  Sometimes, however, you need additional sections,
                   1791: or you need certain particular variables to appear in special sections,
                   1792: for example to map to special hardware.  The @code{section}
                   1793: attribute specifies that a variable (or function) lives in a particular
                   1794: section.  For example, this small program uses several specific section names:
                   1795: 
                   1796: @smallexample
                   1797: struct duart a __attribute__ ((section ("DUART_A"))) = @{ 0 @};
                   1798: struct duart b __attribute__ ((section ("DUART_B"))) = @{ 0 @};
                   1799: char stack[10000] __attribute__ ((section ("STACK"))) = @{ 0 @};
                   1800: int init_data_copy __attribute__ ((section ("INITDATACOPY"))) = 0;
                   1801: 
                   1802: main()
                   1803: @{
                   1804:   /* Initialize stack pointer */
                   1805:   init_sp (stack + sizeof (stack));
                   1806: 
                   1807:   /* Initialize initialized data */
                   1808:   memcpy (&init_data_copy, &data, &edata - &data);
                   1809: 
                   1810:   /* Turn on the serial ports */
                   1811:   init_duart (&a);
                   1812:   init_duart (&b);
                   1813: @}
                   1814: @end smallexample
                   1815: 
                   1816: @noindent
                   1817: Use the @code{section} attribute with an @emph{initialized} definition
                   1818: of a @emph{global} variable, as shown in the example.  GNU CC issues
                   1819: a warning and otherwise ignores the @code{section} attribute in
                   1820: uninitialized variable declarations.
                   1821: 
                   1822: You may only use the @code{section} attribute with a fully initialized
1.1.1.8 ! root     1823: global definition because of the way linkers work.  The linker requires
        !          1824: each object be defined once, with the exception that uninitialized
        !          1825: variables tentatively go in the @code{common} (or @code{bss}) section
        !          1826: and can be multiply "defined".  You can force a variable to be
        !          1827: initialized with the @samp{-fno-common} flag or the @code{nocommon}
        !          1828: attribute.
1.1.1.7   root     1829: 
                   1830: Some file formats do not support arbitrary sections so the @code{section}
                   1831: attribute is not available on all platforms.
                   1832: If you need to map the entire contents of a module to a particular
                   1833: section, consider using the facilities of the linker instead.
                   1834: 
                   1835: @item transparent_union
                   1836: This attribute, attached to a function argument variable which is a
                   1837: union, means to pass the argument in the same way that the first union
1.1.1.8 ! root     1838: member would be passed.  You can also use this attribute on a
1.1.1.7   root     1839: @code{typedef} for a union data type; then it applies to all function
                   1840: arguments with that type.
1.1.1.8 ! root     1841: 
        !          1842: @item unused
        !          1843: This attribute, attached to a variable, means that the variable is meant
        !          1844: to be possibly unused.  GNU CC will not produce a warning for this
        !          1845: variable.
        !          1846: 
        !          1847: @item weak
        !          1848: The @code{weak} attribute is described in @xref{Function Attributes}.
        !          1849: @end table
        !          1850: 
        !          1851: To specify multiple attributes, separate them by commas within the
        !          1852: double parentheses: for example, @samp{__attribute__ ((aligned (16),
        !          1853: packed))}.
        !          1854: 
        !          1855: @node Type Attributes
        !          1856: @section Specifying Attributes of Types
        !          1857: @cindex attribute of types
        !          1858: @cindex type attributes
        !          1859: 
        !          1860: The keyword @code{__attribute__} allows you to specify special
        !          1861: attributes of @code{struct} and @code{union} types when you define such
        !          1862: types.  This keyword is followed by an attribute specification inside
        !          1863: double parentheses.  Three attributes are currently defined for types:
        !          1864: @code{aligned}, @code{packed}, and @code{transparent_union}.  Other
        !          1865: attributes are defined for functions (@pxref{Function Attributes}) and
        !          1866: for variables (@pxref{Variable Attributes}).
        !          1867: 
        !          1868: You may also specify any one of these attributes with @samp{__}
        !          1869: preceding and following its keyword.  This allows you to use these
        !          1870: attributes in header files without being concerned about a possible
        !          1871: macro of the same name.  For example, you may use @code{__aligned__}
        !          1872: instead of @code{aligned}.
        !          1873: 
        !          1874: You may specify the @code{aligned} and @code{transparent_union}
        !          1875: attributes either in a @code{typedef} declaration or just past the
        !          1876: closing curly brace of a complete enum, struct or union type
        !          1877: @emph{definition} and the @code{packed} attribute only past the closing
        !          1878: brace of a definition.
        !          1879: 
        !          1880: @table @code
        !          1881: @cindex @code{aligned} attribute
        !          1882: @item aligned (@var{alignment})
        !          1883: This attribute specifies a minimum alignment (in bytes) for variables
        !          1884: of the specified type.  For example, the declarations:
        !          1885: 
        !          1886: @smallexample
        !          1887: struct S @{ short f[3]; @} __attribute__ ((aligned (8));
        !          1888: typedef int more_aligned_int __attribute__ ((aligned (8));
        !          1889: @end smallexample
        !          1890: 
        !          1891: @noindent
        !          1892: force the compiler to insure (as fas as it can) that each variable whose
        !          1893: type is @code{struct S} or @code{more_aligned_int} will be allocated and
        !          1894: aligned @emph{at least} on a 8-byte boundary.  On a Sparc, having all
        !          1895: variables of type @code{struct S} aligned to 8-byte boundaries allows
        !          1896: the compiler to use the @code{ldd} and @code{std} (doubleword load and
        !          1897: store) instructions when copying one variable of type @code{struct S} to
        !          1898: another, thus improving run-time efficiency.
        !          1899: 
        !          1900: Note that the alignment of any given @code{struct} or @code{union} type
        !          1901: is required by the ANSI C standard to be at least a perfect multiple of
        !          1902: the lowest common multiple of the alignments of all of the members of
        !          1903: the @code{struct} or @code{union} in question.  This means that you @emph{can}
        !          1904: effectively adjust the alignment of a @code{struct} or @code{union}
        !          1905: type by attaching an @code{aligned} attribute to any one of the members
        !          1906: of such a type, but the notation illustrated in the example above is a
        !          1907: more obvious, intuitive, and readable way to request the compiler to
        !          1908: adjust the alignment of an entire @code{struct} or @code{union} type.
        !          1909: 
        !          1910: As in the preceding example, you can explicitly specify the alignment
        !          1911: (in bytes) that you wish the compiler to use for a given @code{struct}
        !          1912: or @code{union} type.  Alternatively, you can leave out the alignment factor
        !          1913: and just ask the compiler to align a type to the maximum
        !          1914: useful alignment for the target machine you are compiling for.  For
        !          1915: example, you could write:
        !          1916: 
        !          1917: @smallexample
        !          1918: struct S @{ short f[3]; @} __attribute__ ((aligned));
        !          1919: @end smallexample
        !          1920: 
        !          1921: Whenever you leave out the alignment factor in an @code{aligned}
        !          1922: attribute specification, the compiler automatically sets the alignment
        !          1923: for the type to the largest alignment which is ever used for any data
        !          1924: type on the target machine you are compiling for.  Doing this can often
        !          1925: make copy operations more efficient, because the compiler can use
        !          1926: whatever instructions copy the biggest chunks of memory when performing
        !          1927: copies to or from the variables which have types that you have aligned
        !          1928: this way.
        !          1929: 
        !          1930: In the example above, if the size of each @code{short} is 2 bytes, then
        !          1931: the size of the entire @code{struct S} type is 6 bytes.  The smallest
        !          1932: power of two which is greater than or equal to that is 8, so the
        !          1933: compiler sets the alignment for the entire @code{struct S} type to 8
        !          1934: bytes.
        !          1935: 
        !          1936: Note that although you can ask the compiler to select a time-efficient
        !          1937: alignment for a given type and then declare only individual stand-alone
        !          1938: objects of that type, the compiler's ability to select a time-efficient
        !          1939: alignment is primarily useful only when you plan to create arrays of
        !          1940: variables having the relevant (efficiently aligned) type.  If you
        !          1941: declare or use arrays of variables of an efficiently-aligned type, then
        !          1942: it is likely that your program will also be doing pointer arithmetic (or
        !          1943: subscripting, which amounts to the same thing) on pointers to the
        !          1944: relevant type, and the code that the compiler generates for these
        !          1945: pointer arithmetic operations will often be more efficient for
        !          1946: efficiently-aligned types than for other types.
        !          1947: 
        !          1948: The @code{aligned} attribute can only increase the alignment; but you
        !          1949: can decrease it by specifying @code{packed} as well.  See below.
        !          1950: 
        !          1951: Note that the effectiveness of @code{aligned} attributes may be limited
        !          1952: by inherent limitations in your linker.  On many systems, the linker is
        !          1953: only able to arrange for variables to be aligned up to a certain maximum
        !          1954: alignment.  (For some linkers, the maximum supported alignment may
        !          1955: be very very small.)  If your linker is only able to align variables
        !          1956: up to a maximum of 8 byte alignment, then specifying @code{aligned(16)}
        !          1957: in an @code{__attribute__} will still only provide you with 8 byte
        !          1958: alignment.  See your linker documentation for further information.
        !          1959: 
        !          1960: @item packed
        !          1961: This attribute, attached to an @code{enum}, @code{struct}, or
        !          1962: @code{union} type definition, specified that the minimum required memory
        !          1963: be used to represent the type.
        !          1964: 
        !          1965: Specifying this attribute for @code{struct} and @code{union} types is
        !          1966: equivalent to specifying the @code{packed} attribute on each of the
        !          1967: structure or union members.  Specifying the @samp{-fshort-enums}
        !          1968: flag on the line is equivalent to specifying the @code{packed}
        !          1969: attribute on all @code{enum} definitions.
        !          1970: 
        !          1971: You may only specify this attribute after a closing curly brace on an
        !          1972: @code{enum} definition, not in a @code{typedef} declaration.
        !          1973: 
        !          1974: @item transparent_union
        !          1975: This attribute, attached to a @code{union} type definition, indicates
        !          1976: that any variable having that union type should, if passed to a
        !          1977: function, be passed in the same way that the first union member would be
        !          1978: passed.  For example:
        !          1979: 
        !          1980: @example
        !          1981: union foo
        !          1982: @{
        !          1983:   char a;
        !          1984:   int x[2];
        !          1985: @} __attribute__ ((transparent_union));
        !          1986: @end example
1.1.1.4   root     1987: @end table
1.1       root     1988: 
1.1.1.6   root     1989: To specify multiple attributes, separate them by commas within the
                   1990: double parentheses: for example, @samp{__attribute__ ((aligned (16),
                   1991: packed))}.
                   1992: 
1.1       root     1993: @node Inline
                   1994: @section An Inline Function is As Fast As a Macro
                   1995: @cindex inline functions
                   1996: @cindex integrating function code
                   1997: @cindex open coding
                   1998: @cindex macros, inline alternative
                   1999: 
1.1.1.4   root     2000: By declaring a function @code{inline}, you can direct GNU CC to
                   2001: integrate that function's code into the code for its callers.  This
                   2002: makes execution faster by eliminating the function-call overhead; in
                   2003: addition, if any of the actual argument values are constant, their known
                   2004: values may permit simplifications at compile time so that not all of the
1.1.1.5   root     2005: inline function's code needs to be included.  The effect on code size is
                   2006: less predictable; object code may be larger or smaller with function
                   2007: inlining, depending on the particular case.  Inlining of functions is an
                   2008: optimization and it really ``works'' only in optimizing compilation.  If
                   2009: you don't use @samp{-O}, no function is really inline.
1.1       root     2010: 
                   2011: To declare a function inline, use the @code{inline} keyword in its
                   2012: declaration, like this:
                   2013: 
                   2014: @example
                   2015: inline int
                   2016: inc (int *a)
                   2017: @{
                   2018:   (*a)++;
                   2019: @}
                   2020: @end example
                   2021: 
                   2022: (If you are writing a header file to be included in ANSI C programs, write
                   2023: @code{__inline__} instead of @code{inline}.  @xref{Alternate Keywords}.)
                   2024: 
                   2025: You can also make all ``simple enough'' functions inline with the option
                   2026: @samp{-finline-functions}.  Note that certain usages in a function
                   2027: definition can make it unsuitable for inline substitution.
                   2028: 
1.1.1.7   root     2029: Note that in C and Objective C, unlike C++, the @code{inline} keyword
                   2030: does not affect the linkage of the function.
                   2031: 
1.1.1.5   root     2032: @cindex automatic @code{inline} for C++ member fns
                   2033: @cindex @code{inline} automatic for C++ member fns
                   2034: @cindex member fns, automatically @code{inline}
                   2035: @cindex C++ member fns, automatically @code{inline}
1.1.1.7   root     2036: GNU CC automatically inlines member functions defined within the class
                   2037: body of C++ programs even if they are not explicitly declared
                   2038: @code{inline}.  (You can override this with @samp{-fno-default-inline};
1.1.1.5   root     2039: @pxref{C++ Dialect Options,,Options Controlling C++ Dialect}.)
                   2040: 
1.1       root     2041: @cindex inline functions, omission of
                   2042: When a function is both inline and @code{static}, if all calls to the
                   2043: function are integrated into the caller, and the function's address is
                   2044: never used, then the function's own assembler code is never referenced.
                   2045: In this case, GNU CC does not actually output assembler code for the
                   2046: function, unless you specify the option @samp{-fkeep-inline-functions}.
                   2047: Some calls cannot be integrated for various reasons (in particular,
                   2048: calls that precede the function's definition cannot be integrated, and
                   2049: neither can recursive calls within the definition).  If there is a
                   2050: nonintegrated call, then the function is compiled to assembler code as
                   2051: usual.  The function must also be compiled as usual if the program
                   2052: refers to its address, because that can't be inlined.
                   2053: 
                   2054: @cindex non-static inline function
                   2055: When an inline function is not @code{static}, then the compiler must assume
                   2056: that there may be calls from other source files; since a global symbol can
                   2057: be defined only once in any program, the function must not be defined in
                   2058: the other source files, so the calls therein cannot be integrated.
                   2059: Therefore, a non-@code{static} inline function is always compiled on its
                   2060: own in the usual fashion.
                   2061: 
                   2062: If you specify both @code{inline} and @code{extern} in the function
                   2063: definition, then the definition is used only for inlining.  In no case
                   2064: is the function compiled on its own, not even if you refer to its
                   2065: address explicitly.  Such an address becomes an external reference, as
                   2066: if you had only declared the function, and had not defined it.
                   2067: 
                   2068: This combination of @code{inline} and @code{extern} has almost the
                   2069: effect of a macro.  The way to use it is to put a function definition in
                   2070: a header file with these keywords, and put another copy of the
                   2071: definition (lacking @code{inline} and @code{extern}) in a library file.
                   2072: The definition in the header file will cause most calls to the function
                   2073: to be inlined.  If any uses of the function remain, they will refer to
                   2074: the single copy in the library.
                   2075: 
1.1.1.4   root     2076: GNU C does not inline any functions when not optimizing.  It is not
                   2077: clear whether it is better to inline or not, in this case, but we found
                   2078: that a correct implementation when not optimizing was difficult.  So we
                   2079: did the easy thing, and turned it off.
                   2080: 
1.1       root     2081: @node Extended Asm
                   2082: @section Assembler Instructions with C Expression Operands
                   2083: @cindex extended @code{asm}
                   2084: @cindex @code{asm} expressions
                   2085: @cindex assembler instructions
                   2086: @cindex registers
                   2087: 
                   2088: In an assembler instruction using @code{asm}, you can now specify the
                   2089: operands of the instruction using C expressions.  This means no more
                   2090: guessing which registers or memory locations will contain the data you want
                   2091: to use.
                   2092: 
                   2093: You must specify an assembler instruction template much like what appears
                   2094: in a machine description, plus an operand constraint string for each
                   2095: operand.
                   2096: 
                   2097: For example, here is how to use the 68881's @code{fsinx} instruction:
                   2098: 
                   2099: @example
                   2100: asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
                   2101: @end example
                   2102: 
                   2103: @noindent
                   2104: Here @code{angle} is the C expression for the input operand while
                   2105: @code{result} is that of the output operand.  Each has @samp{"f"} as its
                   2106: operand constraint, saying that a floating point register is required.  The
                   2107: @samp{=} in @samp{=f} indicates that the operand is an output; all output
                   2108: operands' constraints must use @samp{=}.  The constraints use the same
                   2109: language used in the machine description (@pxref{Constraints}).
                   2110: 
                   2111: Each operand is described by an operand-constraint string followed by the C
                   2112: expression in parentheses.  A colon separates the assembler template from
                   2113: the first output operand, and another separates the last output operand
                   2114: from the first input, if any.  Commas separate output operands and separate
                   2115: inputs.  The total number of operands is limited to ten or to the maximum
                   2116: number of operands in any instruction pattern in the machine description,
                   2117: whichever is greater.
                   2118: 
                   2119: If there are no output operands, and there are input operands, then there
                   2120: must be two consecutive colons surrounding the place where the output
                   2121: operands would go.
                   2122: 
                   2123: Output operand expressions must be lvalues; the compiler can check this.
                   2124: The input operands need not be lvalues.  The compiler cannot check whether
                   2125: the operands have data types that are reasonable for the instruction being
                   2126: executed.  It does not parse the assembler instruction template and does
                   2127: not know what it means, or whether it is valid assembler input.  The
                   2128: extended @code{asm} feature is most often used for machine instructions
1.1.1.8 ! root     2129: that the compiler itself does not know exist.  If the output expression
        !          2130: cannot be directly addressed (for example, it is a bit field), your
        !          2131: constraint must allow a register.  In that case, GNU CC will use
        !          2132: the register as the output of the @code{asm}, and then store that
        !          2133: register into the output.
1.1       root     2134: 
                   2135: The output operands must be write-only; GNU CC will assume that the values
                   2136: in these operands before the instruction are dead and need not be
                   2137: generated.  Extended asm does not support input-output or read-write
                   2138: operands.  For this reason, the constraint character @samp{+}, which
                   2139: indicates such an operand, may not be used.
                   2140: 
                   2141: When the assembler instruction has a read-write operand, or an operand
                   2142: in which only some of the bits are to be changed, you must logically
                   2143: split its function into two separate operands, one input operand and one
                   2144: write-only output operand.  The connection between them is expressed by
                   2145: constraints which say they need to be in the same location when the
                   2146: instruction executes.  You can use the same C expression for both
                   2147: operands, or different expressions.  For example, here we write the
                   2148: (fictitious) @samp{combine} instruction with @code{bar} as its read-only
                   2149: source operand and @code{foo} as its read-write destination:
                   2150: 
                   2151: @example
                   2152: asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
                   2153: @end example
                   2154: 
                   2155: @noindent
                   2156: The constraint @samp{"0"} for operand 1 says that it must occupy the same
                   2157: location as operand 0.  A digit in constraint is allowed only in an input
                   2158: operand, and it must refer to an output operand.
                   2159: 
                   2160: Only a digit in the constraint can guarantee that one operand will be in
                   2161: the same place as another.  The mere fact that @code{foo} is the value of
                   2162: both operands is not enough to guarantee that they will be in the same
                   2163: place in the generated assembler code.  The following would not work:
                   2164: 
                   2165: @example
                   2166: asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
                   2167: @end example
                   2168: 
                   2169: Various optimizations or reloading could cause operands 0 and 1 to be in
                   2170: different registers; GNU CC knows no reason not to do so.  For example, the
                   2171: compiler might find a copy of the value of @code{foo} in one register and
                   2172: use it for operand 1, but generate the output operand 0 in a different
                   2173: register (copying it afterward to @code{foo}'s own address).  Of course,
                   2174: since the register for operand 1 is not even mentioned in the assembler
                   2175: code, the result will not work, but GNU CC can't tell that.
                   2176: 
                   2177: Some instructions clobber specific hard registers.  To describe this, write
                   2178: a third colon after the input operands, followed by the names of the
                   2179: clobbered hard registers (given as strings).  Here is a realistic example
                   2180: for the Vax:
                   2181: 
                   2182: @example
                   2183: asm volatile ("movc3 %0,%1,%2"
                   2184:               : /* no outputs */
                   2185:               : "g" (from), "g" (to), "g" (count)
                   2186:               : "r0", "r1", "r2", "r3", "r4", "r5");
                   2187: @end example
                   2188: 
                   2189: If you refer to a particular hardware register from the assembler code,
                   2190: then you will probably have to list the register after the third colon
                   2191: to tell the compiler that the register's value is modified.  In many
                   2192: assemblers, the register names begin with @samp{%}; to produce one
                   2193: @samp{%} in the assembler code, you must write @samp{%%} in the input.
                   2194: 
1.1.1.3   root     2195: If your assembler instruction can alter the condition code register,
                   2196: add @samp{cc} to the list of clobbered registers.  GNU CC on some
                   2197: machines represents the condition codes as a specific hardware
                   2198: register; @samp{cc} serves to name this register.  On other machines,
                   2199: the condition code is handled differently, and specifying @samp{cc}
                   2200: has no effect.  But it is valid no matter what the machine.
                   2201: 
1.1.1.5   root     2202: If your assembler instruction modifies memory in an unpredictable
1.1.1.4   root     2203: fashion, add @samp{memory} to the list of clobbered registers.
                   2204: This will cause GNU CC to not keep memory values cached in
                   2205: registers across the assembler instruction.
                   2206: 
1.1       root     2207: You can put multiple assembler instructions together in a single @code{asm}
                   2208: template, separated either with newlines (written as @samp{\n}) or with
                   2209: semicolons if the assembler allows such semicolons.  The GNU assembler
                   2210: allows semicolons and all Unix assemblers seem to do so.  The input
                   2211: operands are guaranteed not to use any of the clobbered registers, and
                   2212: neither will the output operands' addresses, so you can read and write the
                   2213: clobbered registers as many times as you like.  Here is an example of
                   2214: multiple instructions in a template; it assumes that the subroutine
                   2215: @code{_foo} accepts arguments in registers 9 and 10:
                   2216: 
                   2217: @example
                   2218: asm ("movl %0,r9;movl %1,r10;call _foo"
                   2219:      : /* no outputs */
                   2220:      : "g" (from), "g" (to)
                   2221:      : "r9", "r10");
                   2222: @end example
                   2223: 
                   2224: Unless an output operand has the @samp{&} constraint modifier, GNU CC may
                   2225: allocate it in the same register as an unrelated input operand, on the
                   2226: assumption that the inputs are consumed before the outputs are produced.
                   2227: This assumption may be false if the assembler code actually consists of
                   2228: more than one instruction.  In such a case, use @samp{&} for each output
                   2229: operand that may not overlap an input.
                   2230: @xref{Modifiers}.
                   2231: 
                   2232: If you want to test the condition code produced by an assembler instruction,
                   2233: you must include a branch and a label in the @code{asm} construct, as follows:
                   2234: 
                   2235: @example
                   2236: asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:"
                   2237:      : "g" (result)
                   2238:      : "g" (input));
                   2239: @end example
                   2240: 
                   2241: @noindent
                   2242: This assumes your assembler supports local labels, as the GNU assembler
                   2243: and most Unix assemblers do.
                   2244: 
1.1.1.6   root     2245: Speaking of labels, jumps from one @code{asm} to another are not
                   2246: supported.  The compiler's optimizers do not know about these jumps,
                   2247: and therefore they cannot take account of them when deciding how to
                   2248: optimize.
                   2249: 
1.1       root     2250: @cindex macros containing @code{asm}
                   2251: Usually the most convenient way to use these @code{asm} instructions is to
                   2252: encapsulate them in macros that look like functions.  For example,
                   2253: 
                   2254: @example
                   2255: #define sin(x)       \
                   2256: (@{ double __value, __arg = (x);   \
                   2257:    asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
                   2258:    __value; @})
                   2259: @end example
                   2260: 
                   2261: @noindent
                   2262: Here the variable @code{__arg} is used to make sure that the instruction
                   2263: operates on a proper @code{double} value, and to accept only those
                   2264: arguments @code{x} which can convert automatically to a @code{double}.
                   2265: 
                   2266: Another way to make sure the instruction operates on the correct data type
                   2267: is to use a cast in the @code{asm}.  This is different from using a
                   2268: variable @code{__arg} in that it converts more different types.  For
                   2269: example, if the desired type were @code{int}, casting the argument to
                   2270: @code{int} would accept a pointer with no complaint, while assigning the
                   2271: argument to an @code{int} variable named @code{__arg} would warn about
                   2272: using a pointer unless the caller explicitly casts it.
                   2273: 
                   2274: If an @code{asm} has output operands, GNU CC assumes for optimization
                   2275: purposes that the instruction has no side effects except to change the
                   2276: output operands.  This does not mean that instructions with a side effect
                   2277: cannot be used, but you must be careful, because the compiler may eliminate
                   2278: them if the output operands aren't used, or move them out of loops, or
                   2279: replace two with one if they constitute a common subexpression.  Also, if
                   2280: your instruction does have a side effect on a variable that otherwise
                   2281: appears not to change, the old value of the variable may be reused later if
                   2282: it happens to be found in a register.
                   2283: 
                   2284: You can prevent an @code{asm} instruction from being deleted, moved
                   2285: significantly, or combined, by writing the keyword @code{volatile} after
                   2286: the @code{asm}.  For example:
                   2287: 
                   2288: @example
                   2289: #define set_priority(x)  \
                   2290: asm volatile ("set_priority %0": /* no outputs */ : "g" (x))
                   2291: @end example
                   2292: 
                   2293: @noindent
                   2294: An instruction without output operands will not be deleted or moved
                   2295: significantly, regardless, unless it is unreachable.
                   2296: 
                   2297: Note that even a volatile @code{asm} instruction can be moved in ways
                   2298: that appear insignificant to the compiler, such as across jump
                   2299: instructions.  You can't expect a sequence of volatile @code{asm}
                   2300: instructions to remain perfectly consecutive.  If you want consecutive
                   2301: output, use a single @code{asm}.
                   2302: 
                   2303: It is a natural idea to look for a way to give access to the condition
                   2304: code left by the assembler instruction.  However, when we attempted to
                   2305: implement this, we found no way to make it work reliably.  The problem
                   2306: is that output operands might need reloading, which would result in
                   2307: additional following ``store'' instructions.  On most machines, these
                   2308: instructions would alter the condition code before there was time to
                   2309: test it.  This problem doesn't arise for ordinary ``test'' and
                   2310: ``compare'' instructions because they don't have any output operands.
                   2311: 
                   2312: If you are writing a header file that should be includable in ANSI C
                   2313: programs, write @code{__asm__} instead of @code{asm}.  @xref{Alternate
                   2314: Keywords}.
                   2315: 
1.1.1.5   root     2316: @ifclear INTERNALS
                   2317: @c Show the details on constraints if they do not appear elsewhere in
                   2318: @c the manual
                   2319: @include md.texi
                   2320: @end ifclear
                   2321: 
1.1       root     2322: @node Asm Labels
                   2323: @section Controlling Names Used in Assembler Code
                   2324: @cindex assembler names for identifiers
                   2325: @cindex names used in assembler code
                   2326: @cindex identifiers, names in assembler code
                   2327: 
                   2328: You can specify the name to be used in the assembler code for a C
                   2329: function or variable by writing the @code{asm} (or @code{__asm__})
                   2330: keyword after the declarator as follows:
                   2331: 
                   2332: @example
                   2333: int foo asm ("myfoo") = 2;
                   2334: @end example
                   2335: 
                   2336: @noindent
                   2337: This specifies that the name to be used for the variable @code{foo} in
                   2338: the assembler code should be @samp{myfoo} rather than the usual
                   2339: @samp{_foo}.
                   2340: 
                   2341: On systems where an underscore is normally prepended to the name of a C
                   2342: function or variable, this feature allows you to define names for the
                   2343: linker that do not start with an underscore.
                   2344: 
                   2345: You cannot use @code{asm} in this way in a function @emph{definition}; but
                   2346: you can get the same effect by writing a declaration for the function
                   2347: before its definition and putting @code{asm} there, like this:
                   2348: 
                   2349: @example
                   2350: extern func () asm ("FUNC");
                   2351: 
                   2352: func (x, y)
                   2353:      int x, y;
                   2354: @dots{}
                   2355: @end example
                   2356: 
                   2357: It is up to you to make sure that the assembler names you choose do not
                   2358: conflict with any other assembler symbols.  Also, you must not use a
                   2359: register name; that would produce completely invalid assembler code.  GNU
                   2360: CC does not as yet have the ability to store static variables in registers.
                   2361: Perhaps that will be added.
                   2362: 
                   2363: @node Explicit Reg Vars
                   2364: @section Variables in Specified Registers
                   2365: @cindex explicit register variables
                   2366: @cindex variables in specified registers
                   2367: @cindex specified registers
                   2368: @cindex registers, global allocation
                   2369: 
                   2370: GNU C allows you to put a few global variables into specified hardware
                   2371: registers.  You can also specify the register in which an ordinary
                   2372: register variable should be allocated.
                   2373: 
                   2374: @itemize @bullet
                   2375: @item
                   2376: Global register variables reserve registers throughout the program.
                   2377: This may be useful in programs such as programming language
                   2378: interpreters which have a couple of global variables that are accessed
                   2379: very often.
                   2380: 
                   2381: @item
                   2382: Local register variables in specific registers do not reserve the
                   2383: registers.  The compiler's data flow analysis is capable of determining
                   2384: where the specified registers contain live values, and where they are
                   2385: available for other uses.
                   2386: 
                   2387: These local variables are sometimes convenient for use with the extended
                   2388: @code{asm} feature (@pxref{Extended Asm}), if you want to write one
                   2389: output of the assembler instruction directly into a particular register.
                   2390: (This will work provided the register you specify fits the constraints
                   2391: specified for that operand in the @code{asm}.)
                   2392: @end itemize
                   2393: 
                   2394: @menu
                   2395: * Global Reg Vars::
                   2396: * Local Reg Vars::
                   2397: @end menu
                   2398: 
                   2399: @node Global Reg Vars
                   2400: @subsection Defining Global Register Variables
                   2401: @cindex global register variables
                   2402: @cindex registers, global variables in
                   2403: 
                   2404: You can define a global register variable in GNU C like this:
                   2405: 
                   2406: @example
                   2407: register int *foo asm ("a5");
                   2408: @end example
                   2409: 
                   2410: @noindent
                   2411: Here @code{a5} is the name of the register which should be used.  Choose a
                   2412: register which is normally saved and restored by function calls on your
                   2413: machine, so that library routines will not clobber it.
                   2414: 
                   2415: Naturally the register name is cpu-dependent, so you would need to
                   2416: conditionalize your program according to cpu type.  The register
                   2417: @code{a5} would be a good choice on a 68000 for a variable of pointer
                   2418: type.  On machines with register windows, be sure to choose a ``global''
                   2419: register that is not affected magically by the function call mechanism.
                   2420: 
                   2421: In addition, operating systems on one type of cpu may differ in how they
                   2422: name the registers; then you would need additional conditionals.  For
                   2423: example, some 68000 operating systems call this register @code{%a5}.
                   2424: 
                   2425: Eventually there may be a way of asking the compiler to choose a register
                   2426: automatically, but first we need to figure out how it should choose and
                   2427: how to enable you to guide the choice.  No solution is evident.
                   2428: 
                   2429: Defining a global register variable in a certain register reserves that
                   2430: register entirely for this use, at least within the current compilation.
                   2431: The register will not be allocated for any other purpose in the functions
                   2432: in the current compilation.  The register will not be saved and restored by
                   2433: these functions.  Stores into this register are never deleted even if they
                   2434: would appear to be dead, but references may be deleted or moved or
                   2435: simplified.
                   2436: 
                   2437: It is not safe to access the global register variables from signal
                   2438: handlers, or from more than one thread of control, because the system
                   2439: library routines may temporarily use the register for other things (unless
                   2440: you recompile them specially for the task at hand).
                   2441: 
                   2442: @cindex @code{qsort}, and global register variables
                   2443: It is not safe for one function that uses a global register variable to
                   2444: call another such function @code{foo} by way of a third function
                   2445: @code{lose} that was compiled without knowledge of this variable (i.e. in a
                   2446: different source file in which the variable wasn't declared).  This is
                   2447: because @code{lose} might save the register and put some other value there.
                   2448: For example, you can't expect a global register variable to be available in
                   2449: the comparison-function that you pass to @code{qsort}, since @code{qsort}
                   2450: might have put something else in that register.  (If you are prepared to
                   2451: recompile @code{qsort} with the same global register variable, you can
                   2452: solve this problem.)
                   2453: 
                   2454: If you want to recompile @code{qsort} or other source files which do not
                   2455: actually use your global register variable, so that they will not use that
                   2456: register for any other purpose, then it suffices to specify the compiler
                   2457: option @samp{-ffixed-@var{reg}}.  You need not actually add a global
                   2458: register declaration to their source code.
                   2459: 
                   2460: A function which can alter the value of a global register variable cannot
                   2461: safely be called from a function compiled without this variable, because it
                   2462: could clobber the value the caller expects to find there on return.
                   2463: Therefore, the function which is the entry point into the part of the
                   2464: program that uses the global register variable must explicitly save and
                   2465: restore the value which belongs to its caller.
                   2466: 
                   2467: @cindex register variable after @code{longjmp}
                   2468: @cindex global register after @code{longjmp}
                   2469: @cindex value after @code{longjmp}
                   2470: @findex longjmp
                   2471: @findex setjmp
                   2472: On most machines, @code{longjmp} will restore to each global register
                   2473: variable the value it had at the time of the @code{setjmp}.  On some
                   2474: machines, however, @code{longjmp} will not change the value of global
                   2475: register variables.  To be portable, the function that called @code{setjmp}
                   2476: should make other arrangements to save the values of the global register
                   2477: variables, and to restore them in a @code{longjmp}.  This way, the same
                   2478: thing will happen regardless of what @code{longjmp} does.
                   2479: 
                   2480: All global register variable declarations must precede all function
                   2481: definitions.  If such a declaration could appear after function
                   2482: definitions, the declaration would be too late to prevent the register from
                   2483: being used for other purposes in the preceding functions.
                   2484: 
                   2485: Global register variables may not have initial values, because an
                   2486: executable file has no means to supply initial contents for a register.
                   2487: 
                   2488: On the Sparc, there are reports that g3 @dots{} g7 are suitable
                   2489: registers, but certain library functions, such as @code{getwd}, as well
                   2490: as the subroutines for division and remainder, modify g3 and g4.  g1 and
                   2491: g2 are local temporaries.
                   2492: 
                   2493: On the 68000, a2 @dots{} a5 should be suitable, as should d2 @dots{} d7.
                   2494: Of course, it will not do to use more than a few of those.
                   2495: 
                   2496: @node Local Reg Vars
                   2497: @subsection Specifying Registers for Local Variables
                   2498: @cindex local variables, specifying registers 
                   2499: @cindex specifying registers for local variables
                   2500: @cindex registers for local variables
                   2501: 
                   2502: You can define a local register variable with a specified register
                   2503: like this:
                   2504: 
                   2505: @example
                   2506: register int *foo asm ("a5");
                   2507: @end example
                   2508: 
                   2509: @noindent
                   2510: Here @code{a5} is the name of the register which should be used.  Note
                   2511: that this is the same syntax used for defining global register
                   2512: variables, but for a local variable it would appear within a function.
                   2513: 
                   2514: Naturally the register name is cpu-dependent, but this is not a
                   2515: problem, since specific registers are most often useful with explicit
                   2516: assembler instructions (@pxref{Extended Asm}).  Both of these things
                   2517: generally require that you conditionalize your program according to
                   2518: cpu type.
                   2519: 
                   2520: In addition, operating systems on one type of cpu may differ in how they
                   2521: name the registers; then you would need additional conditionals.  For
                   2522: example, some 68000 operating systems call this register @code{%a5}.
                   2523: 
                   2524: Eventually there may be a way of asking the compiler to choose a register
                   2525: automatically, but first we need to figure out how it should choose and
                   2526: how to enable you to guide the choice.  No solution is evident.
                   2527: 
                   2528: Defining such a register variable does not reserve the register; it
                   2529: remains available for other uses in places where flow control determines
                   2530: the variable's value is not live.  However, these registers are made
                   2531: unavailable for use in the reload pass.  I would not be surprised if
                   2532: excessive use of this feature leaves the compiler too few available
                   2533: registers to compile certain functions.
                   2534: 
                   2535: @node Alternate Keywords
                   2536: @section Alternate Keywords
                   2537: @cindex alternate keywords
                   2538: @cindex keywords, alternate
                   2539: 
                   2540: The option @samp{-traditional} disables certain keywords; @samp{-ansi}
                   2541: disables certain others.  This causes trouble when you want to use GNU C
                   2542: extensions, or ANSI C features, in a general-purpose header file that
                   2543: should be usable by all programs, including ANSI C programs and traditional
                   2544: ones.  The keywords @code{asm}, @code{typeof} and @code{inline} cannot be
                   2545: used since they won't work in a program compiled with @samp{-ansi}, while
                   2546: the keywords @code{const}, @code{volatile}, @code{signed}, @code{typeof}
                   2547: and @code{inline} won't work in a program compiled with
                   2548: @samp{-traditional}.@refill
                   2549: 
                   2550: The way to solve these problems is to put @samp{__} at the beginning and
                   2551: end of each problematical keyword.  For example, use @code{__asm__}
                   2552: instead of @code{asm}, @code{__const__} instead of @code{const}, and
                   2553: @code{__inline__} instead of @code{inline}.
                   2554: 
                   2555: Other C compilers won't accept these alternative keywords; if you want to
                   2556: compile with another compiler, you can define the alternate keywords as
                   2557: macros to replace them with the customary keywords.  It looks like this:
                   2558: 
                   2559: @example
                   2560: #ifndef __GNUC__
                   2561: #define __asm__ asm
                   2562: #endif
                   2563: @end example
                   2564: 
                   2565: @samp{-pedantic} causes warnings for many GNU C extensions.  You can
                   2566: prevent such warnings within one expression by writing
                   2567: @code{__extension__} before the expression.  @code{__extension__} has no
                   2568: effect aside from this.
                   2569: 
                   2570: @node Incomplete Enums
                   2571: @section Incomplete @code{enum} Types
                   2572: 
                   2573: You can define an @code{enum} tag without specifying its possible values.
                   2574: This results in an incomplete type, much like what you get if you write
                   2575: @code{struct foo} without describing the elements.  A later declaration
                   2576: which does specify the possible values completes the type.
                   2577: 
                   2578: You can't allocate variables or storage using the type while it is
                   2579: incomplete.  However, you can work with pointers to that type.
                   2580: 
                   2581: This extension may not be very useful, but it makes the handling of
                   2582: @code{enum} more consistent with the way @code{struct} and @code{union}
                   2583: are handled.
1.1.1.5   root     2584: 
1.1.1.7   root     2585: This extension is not supported by GNU C++.
                   2586: 
1.1.1.5   root     2587: @node Function Names
                   2588: @section Function Names as Strings
                   2589: 
                   2590: GNU CC predefines two string variables to be the name of the current function.
                   2591: The variable @code{__FUNCTION__} is the name of the function as it appears
                   2592: in the source.  The variable @code{__PRETTY_FUNCTION__} is the name of
                   2593: the function pretty printed in a language specific fashion.
                   2594: 
                   2595: These names are always the same in a C function, but in a C++ function
                   2596: they may be different.  For example, this program:
                   2597: 
                   2598: @smallexample
                   2599: extern "C" @{
                   2600: extern int printf (char *, ...);
                   2601: @}
                   2602: 
                   2603: class a @{
                   2604:  public:
                   2605:   sub (int i)
                   2606:     @{
                   2607:       printf ("__FUNCTION__ = %s\n", __FUNCTION__);
                   2608:       printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
                   2609:     @}
                   2610: @};
                   2611: 
                   2612: int
                   2613: main (void)
                   2614: @{
                   2615:   a ax;
                   2616:   ax.sub (0);
                   2617:   return 0;
                   2618: @}
                   2619: @end smallexample
                   2620: 
                   2621: @noindent
                   2622: gives this output:
                   2623: 
                   2624: @smallexample
                   2625: __FUNCTION__ = sub
                   2626: __PRETTY_FUNCTION__ = int  a::sub (int)
                   2627: @end smallexample
                   2628: 
1.1.1.8 ! root     2629: These names are not macros: they are predefined string variables.
        !          2630: For example, @samp{#ifdef __FUNCTION__} does not have any special
        !          2631: meaning inside a function, since the preprocessor does not do anything
        !          2632: special with the identifier @code{__FUNCTION__}.
        !          2633: 
1.1.1.5   root     2634: @node C++ Extensions
                   2635: @chapter Extensions to the C++ Language
                   2636: @cindex extensions, C++ language
                   2637: @cindex C++ language extensions
                   2638: 
                   2639: The GNU compiler provides these extensions to the C++ language (and you
                   2640: can also use most of the C language extensions in your C++ programs).  If you
                   2641: want to write code that checks whether these features are available, you can
                   2642: test for the GNU compiler the same way as for C programs: check for a
                   2643: predefined macro @code{__GNUC__}.  You can also use @code{__GNUG__} to
                   2644: test specifically for GNU C++ (@pxref{Standard Predefined,,Standard
                   2645: Predefined Macros,cpp.info,The C Preprocessor}).
                   2646: 
                   2647: @menu
                   2648: * Naming Results::      Giving a name to C++ function return values.
                   2649: * Min and Max::                C++ Minimum and maximum operators.
                   2650: * Destructors and Goto:: Goto is safe to use in C++ even when destructors
                   2651:                            are needed.
                   2652: * C++ Interface::       You can use a single C++ header file for both
                   2653:                          declarations and definitions.
1.1.1.7   root     2654: * Template Instantiation:: Methods for ensuring that exactly one copy of
                   2655:                          each needed template instantiation is emitted.
                   2656: * C++ Signatures::     You can specify abstract types to get subtype
                   2657:                         polymorphism independent from inheritance.
1.1.1.5   root     2658: @end menu
                   2659: 
                   2660: @node Naming Results
                   2661: @section Named Return Values in C++
                   2662: 
                   2663: @cindex @code{return}, in C++ function header
                   2664: @cindex return value, named, in C++
                   2665: @cindex named return value in C++
                   2666: @cindex C++ named return value
                   2667: GNU C++ extends the function-definition syntax to allow you to specify a
                   2668: name for the result of a function outside the body of the definition, in
                   2669: C++ programs:
                   2670: 
                   2671: @example
                   2672: @group
                   2673: @var{type}
                   2674: @var{functionname} (@var{args}) return @var{resultname};
                   2675: @{ 
                   2676:   @dots{}
                   2677:   @var{body}
                   2678:   @dots{}
                   2679: @}
                   2680: @end group
                   2681: @end example
                   2682: 
                   2683: You can use this feature to avoid an extra constructor call when
                   2684: a function result has a class type.  For example, consider a function
                   2685: @code{m}, declared as @w{@samp{X v = m ();}}, whose result is of class
                   2686: @code{X}:
                   2687: 
                   2688: @example
                   2689: X
                   2690: m ()
                   2691: @{
                   2692:   X b;
                   2693:   b.a = 23;
                   2694:   return b; 
                   2695: @}
                   2696: @end example
                   2697: 
                   2698: @cindex implicit argument: return value
                   2699: Although @code{m} appears to have no arguments, in fact it has one implicit
                   2700: argument: the address of the return value.  At invocation, the address
                   2701: of enough space to hold @code{v} is sent in as the implicit argument.
                   2702: Then @code{b} is constructed and its @code{a} field is set to the value
                   2703: 23.  Finally, a copy constructor (a constructor of the form @samp{X(X&)})
                   2704: is applied to @code{b}, with the (implicit) return value location as the
                   2705: target, so that @code{v} is now bound to the return value.
                   2706: 
                   2707: But this is wasteful.  The local @code{b} is declared just to hold
                   2708: something that will be copied right out.  While a compiler that
                   2709: combined an ``elision'' algorithm with interprocedural data flow
                   2710: analysis could conceivably eliminate all of this, it is much more
                   2711: practical to allow you to assist the compiler in generating
                   2712: efficient code by manipulating the return value explicitly,
                   2713: thus avoiding the local variable and copy constructor altogether.
                   2714: 
                   2715: Using the extended GNU C++ function-definition syntax, you can avoid the
                   2716: temporary allocation and copying by naming @code{r} as your return value
1.1.1.8 ! root     2717: at the outset, and assigning to its @code{a} field directly:
1.1.1.5   root     2718: 
                   2719: @example
                   2720: X
                   2721: m () return r;
                   2722: @{
                   2723:   r.a = 23; 
                   2724: @}
                   2725: @end example
                   2726: 
                   2727: @noindent
                   2728: The declaration of @code{r} is a standard, proper declaration, whose effects
                   2729: are executed @strong{before} any of the body of @code{m}.
                   2730: 
                   2731: Functions of this type impose no additional restrictions; in particular,
                   2732: you can execute @code{return} statements, or return implicitly by
                   2733: reaching the end of the function body (``falling off the edge'').
                   2734: Cases like 
                   2735: 
                   2736: @example
                   2737: X
                   2738: m () return r (23);
                   2739: @{
                   2740:   return; 
                   2741: @}
                   2742: @end example
                   2743: 
                   2744: @noindent
                   2745: (or even @w{@samp{X m () return r (23); @{ @}}}) are unambiguous, since
                   2746: the return value @code{r} has been initialized in either case.  The
                   2747: following code may be hard to read, but also works predictably:
                   2748: 
                   2749: @example
                   2750: X
                   2751: m () return r;
                   2752: @{
                   2753:   X b;
                   2754:   return b; 
                   2755: @}
                   2756: @end example
                   2757: 
                   2758: The return value slot denoted by @code{r} is initialized at the outset,
                   2759: but the statement @samp{return b;} overrides this value.  The compiler
                   2760: deals with this by destroying @code{r} (calling the destructor if there
                   2761: is one, or doing nothing if there is not), and then reinitializing
                   2762: @code{r} with @code{b}.
                   2763: 
                   2764: This extension is provided primarily to help people who use overloaded
                   2765: operators, where there is a great need to control not just the
                   2766: arguments, but the return values of functions.  For classes where the
                   2767: copy constructor incurs a heavy performance penalty (especially in the
                   2768: common case where there is a quick default constructor), this is a major
                   2769: savings.  The disadvantage of this extension is that you do not control
                   2770: when the default constructor for the return value is called: it is
                   2771: always called at the beginning.
                   2772: 
                   2773: @node Min and Max
                   2774: @section Minimum and Maximum Operators in C++
                   2775: 
                   2776: It is very convenient to have operators which return the ``minimum'' or the
                   2777: ``maximum'' of two arguments.  In GNU C++ (but not in GNU C),
                   2778: 
                   2779: @table @code
                   2780: @item @var{a} <? @var{b}
                   2781: @findex <?
                   2782: @cindex minimum operator
                   2783: is the @dfn{minimum}, returning the smaller of the numeric values
                   2784: @var{a} and @var{b};
                   2785: 
                   2786: @item @var{a} >? @var{b}
                   2787: @findex >?
                   2788: @cindex maximum operator
                   2789: is the @dfn{maximum}, returning the larger of the numeric values @var{a}
                   2790: and @var{b}.
                   2791: @end table
                   2792: 
                   2793: These operations are not primitive in ordinary C++, since you can
                   2794: use a macro to return the minimum of two things in C++, as in the
                   2795: following example.
                   2796: 
                   2797: @example
                   2798: #define MIN(X,Y) ((X) < (Y) ? : (X) : (Y))
                   2799: @end example
                   2800: 
                   2801: @noindent
                   2802: You might then use @w{@samp{int min = MIN (i, j);}} to set @var{min} to
                   2803: the minimum value of variables @var{i} and @var{j}.
                   2804: 
                   2805: However, side effects in @code{X} or @code{Y} may cause unintended
                   2806: behavior.  For example, @code{MIN (i++, j++)} will fail, incrementing
                   2807: the smaller counter twice.  A GNU C extension allows you to write safe
                   2808: macros that avoid this kind of problem (@pxref{Naming Types,,Naming an
                   2809: Expression's Type}).  However, writing @code{MIN} and @code{MAX} as
                   2810: macros also forces you to use function-call notation notation for a
                   2811: fundamental arithmetic operation.  Using GNU C++ extensions, you can
                   2812: write @w{@samp{int min = i <? j;}} instead.
                   2813: 
                   2814: Since @code{<?} and @code{>?} are built into the compiler, they properly
                   2815: handle expressions with side-effects;  @w{@samp{int min = i++ <? j++;}}
                   2816: works correctly.
                   2817: 
                   2818: @node Destructors and Goto
                   2819: @section @code{goto} and Destructors in GNU C++
                   2820: 
                   2821: @cindex @code{goto} in C++
                   2822: @cindex destructors vs @code{goto}
                   2823: In C++ programs, you can safely use the @code{goto} statement.  When you
                   2824: use it to exit a block which contains aggregates requiring destructors,
                   2825: the destructors will run before the @code{goto} transfers control.  (In
                   2826: ANSI C++, @code{goto} is restricted to targets within the current
                   2827: block.)
                   2828: 
                   2829: @cindex constructors vs @code{goto}
                   2830: The compiler still forbids using @code{goto} to @emph{enter} a scope
                   2831: that requires constructors.
                   2832: 
                   2833: @node C++ Interface
                   2834: @section Declarations and Definitions in One Header
                   2835: 
                   2836: @cindex interface and implementation headers, C++
                   2837: @cindex C++ interface and implementation headers
                   2838: C++ object definitions can be quite complex.  In principle, your source
                   2839: code will need two kinds of things for each object that you use across
                   2840: more than one source file.  First, you need an @dfn{interface}
                   2841: specification, describing its structure with type declarations and
                   2842: function prototypes.  Second, you need the @dfn{implementation} itself.
                   2843: It can be tedious to maintain a separate interface description in a
                   2844: header file, in parallel to the actual implementation.  It is also
                   2845: dangerous, since separate interface and implementation definitions may
                   2846: not remain parallel.
                   2847: 
                   2848: @cindex pragmas, interface and implementation
                   2849: With GNU C++, you can use a single header file for both purposes.
                   2850: 
                   2851: @quotation
                   2852: @emph{Warning:} The mechanism to specify this is in transition.  For the
                   2853: nonce, you must use one of two @code{#pragma} commands; in a future
                   2854: release of GNU C++, an alternative mechanism will make these
                   2855: @code{#pragma} commands unnecessary.
                   2856: @end quotation
                   2857: 
                   2858: The header file contains the full definitions, but is marked with
                   2859: @samp{#pragma interface} in the source code.  This allows the compiler
                   2860: to use the header file only as an interface specification when ordinary
                   2861: source files incorporate it with @code{#include}.  In the single source
                   2862: file where the full implementation belongs, you can use either a naming
                   2863: convention or @samp{#pragma implementation} to indicate this alternate
                   2864: use of the header file.
                   2865: 
                   2866: @table @code
                   2867: @item #pragma interface
1.1.1.7   root     2868: @itemx #pragma interface "@var{subdir}/@var{objects}.h"
1.1.1.5   root     2869: @kindex #pragma interface
                   2870: Use this directive in @emph{header files} that define object classes, to save
                   2871: space in most of the object files that use those classes.  Normally,
                   2872: local copies of certain information (backup copies of inline member
                   2873: functions, debugging information, and the internal tables that implement
                   2874: virtual functions) must be kept in each object file that includes class
                   2875: definitions.  You can use this pragma to avoid such duplication.  When a
                   2876: header file containing @samp{#pragma interface} is included in a
                   2877: compilation, this auxiliary information will not be generated (unless
                   2878: the main input source file itself uses @samp{#pragma implementation}).
                   2879: Instead, the object files will contain references to be resolved at link
                   2880: time.
                   2881: 
1.1.1.7   root     2882: The second form of this directive is useful for the case where you have
                   2883: multiple headers with the same name in different directories.  If you
                   2884: use this form, you must specify the same string to @samp{#pragma
                   2885: implementation}.
                   2886: 
1.1.1.5   root     2887: @item #pragma implementation
                   2888: @itemx #pragma implementation "@var{objects}.h"
                   2889: @kindex #pragma implementation
                   2890: Use this pragma in a @emph{main input file}, when you want full output from
                   2891: included header files to be generated (and made globally visible).  The
                   2892: included header file, in turn, should use @samp{#pragma interface}.
                   2893: Backup copies of inline member functions, debugging information, and the
                   2894: internal tables used to implement virtual functions are all generated in
                   2895: implementation files.
                   2896: 
                   2897: @cindex implied @code{#pragma implementation}
                   2898: @cindex @code{#pragma implementation}, implied
                   2899: @cindex naming convention, implementation headers
1.1.1.7   root     2900: If you use @samp{#pragma implementation} with no argument, it applies to
                   2901: an include file with the same basename@footnote{A file's @dfn{basename}
                   2902: was the name stripped of all leading path information and of trailing
                   2903: suffixes, such as @samp{.h} or @samp{.C} or @samp{.cc}.} as your source
                   2904: file.  For example, in @file{allclass.cc}, @samp{#pragma implementation}
                   2905: by itself is equivalent to @samp{#pragma implementation "allclass.h"}.
                   2906: 
                   2907: In versions of GNU C++ prior to 2.6.0 @file{allclass.h} was treated as
                   2908: an implementation file whenever you would include it from
                   2909: @file{allclass.cc} even if you never specified @samp{#pragma
                   2910: implementation}.  This was deemed to be more trouble than it was worth,
                   2911: however, and disabled.
1.1.1.5   root     2912: 
                   2913: If you use an explicit @samp{#pragma implementation}, it must appear in
                   2914: your source file @emph{before} you include the affected header files.
                   2915: 
                   2916: Use the string argument if you want a single implementation file to
                   2917: include code from multiple header files.  (You must also use
                   2918: @samp{#include} to include the header file; @samp{#pragma
                   2919: implementation} only specifies how to use the file---it doesn't actually
                   2920: include it.)
                   2921: 
                   2922: There is no way to split up the contents of a single header file into
                   2923: multiple implementation files.
                   2924: @end table
                   2925: 
                   2926: @cindex inlining and C++ pragmas
                   2927: @cindex C++ pragmas, effect on inlining
                   2928: @cindex pragmas in C++, effect on inlining
                   2929: @samp{#pragma implementation} and @samp{#pragma interface} also have an
                   2930: effect on function inlining.
                   2931: 
                   2932: If you define a class in a header file marked with @samp{#pragma
                   2933: interface}, the effect on a function defined in that class is similar to
                   2934: an explicit @code{extern} declaration---the compiler emits no code at
                   2935: all to define an independent version of the function.  Its definition
                   2936: is used only for inlining with its callers.
                   2937: 
                   2938: Conversely, when you include the same header file in a main source file
                   2939: that declares it as @samp{#pragma implementation}, the compiler emits
                   2940: code for the function itself; this defines a version of the function
                   2941: that can be found via pointers (or by callers compiled without
1.1.1.7   root     2942: inlining).  If all calls to the function can be inlined, you can avoid
                   2943: emitting the function by compiling with @samp{-fno-implement-inlines}.
                   2944: If any calls were not inlined, you will get linker errors.
                   2945: 
                   2946: @node Template Instantiation
                   2947: @section Where's the Template?
                   2948: 
                   2949: @cindex template instantiation
                   2950: 
                   2951: C++ templates are the first language feature to require more
                   2952: intelligence from the environment than one usually finds on a UNIX
                   2953: system.  Somehow the compiler and linker have to make sure that each
                   2954: template instance occurs exactly once in the executable if it is needed,
                   2955: and not at all otherwise.  There are two basic approaches to this
                   2956: problem, which I will refer to as the Borland model and the Cfront model.
                   2957: 
                   2958: @table @asis
                   2959: @item Borland model
                   2960: Borland C++ solved the template instantiation problem by adding the code
                   2961: equivalent of common blocks to their linker; template instances
                   2962: are emitted in each translation unit that uses them, and they are
                   2963: collapsed together at run time.  The advantage of this model is that the
                   2964: linker only has to consider the object files themselves; there is no
                   2965: external complexity to worry about.  This disadvantage is that
                   2966: compilation time is increased because the template code is being
                   2967: compiled repeatedly.  Code written for this model tends to include
                   2968: definitions of all member templates in the header file, since they must
                   2969: be seen to be compiled.
                   2970: 
                   2971: @item Cfront model
                   2972: The AT&T C++ translator, Cfront, solved the template instantiation
                   2973: problem by creating the notion of a template repository, an
                   2974: automatically maintained place where template instances are stored.  As
                   2975: individual object files are built, notes are placed in the repository to
                   2976: record where templates and potential type arguments were seen so that
                   2977: the subsequent instantiation step knows where to find them.  At link
                   2978: time, any needed instances are generated and linked in.  The advantages
                   2979: of this model are more optimal compilation speed and the ability to use
                   2980: the system linker; to implement the Borland model a compiler vendor also
                   2981: needs to replace the linker.  The disadvantages are vastly increased
                   2982: complexity, and thus potential for error; theoretically, this should be
                   2983: just as transparent, but in practice it has been very difficult to build
                   2984: multiple programs in one directory and one program in multiple
                   2985: directories using Cfront.  Code written for this model tends to separate
                   2986: definitions of non-inline member templates into a separate file, which
                   2987: is magically found by the link preprocessor when a template needs to be
                   2988: instantiated.
                   2989: @end table
1.1.1.5   root     2990: 
1.1.1.8 ! root     2991: Currently, g++ implements neither automatic model.  In the mean time,
        !          2992: you have three options for dealing with template instantiations:
1.1.1.7   root     2993: 
                   2994: @enumerate
                   2995: @item
                   2996: Do nothing.  Pretend g++ does implement automatic instantiation
                   2997: management.  Code written for the Borland model will work fine, but
                   2998: each translation unit will contain instances of each of the templates it
                   2999: uses.  In a large program, this can lead to an unacceptable amount of code
                   3000: duplication.
                   3001: 
                   3002: @item
                   3003: Add @samp{#pragma interface} to all files containing template
                   3004: definitions.  For each of these files, add @samp{#pragma implementation
                   3005: "@var{filename}"} to the top of some @samp{.C} file which
                   3006: @samp{#include}s it.  Then compile everything with -fexternal-templates.
                   3007: The templates will then only be expanded in the translation unit which
                   3008: implements them (i.e. has a @samp{#pragma implementation} line for the
                   3009: file where they live); all other files will use external references.  If
                   3010: you're lucky, everything should work properly.  If you get undefined
                   3011: symbol errors, you need to make sure that each template instance which
                   3012: is used in the program is used in the file which implements that
                   3013: template.  If you don't have any use for a particular instance in that
                   3014: file, you can just instantiate it explicitly, using the syntax from the
                   3015: latest C++ working paper:
                   3016: 
                   3017: @example
                   3018: template class A<int>;
                   3019: template ostream& operator << (ostream&, const A<int>&);
                   3020: @end example
                   3021: 
                   3022: This strategy will work with code written for either model.  If you are
                   3023: using code written for the Cfront model, the file containing a class
                   3024: template and the file containing its member templates should be
                   3025: implemented in the same translation unit.
                   3026: 
                   3027: A slight variation on this approach is to use the flag
                   3028: -falt-external-templates instead; this flag causes template instances to
                   3029: be emitted in the translation unit that implements the header where they
                   3030: are first instantiated, rather than the one which implements the file
                   3031: where the templates are defined.  This header must be the same in all
                   3032: translation units, or things are likely to break.
                   3033: 
                   3034: @xref{C++ Interface,,Declarations and Definitions in One Header}, for
                   3035: more discussion of these pragmas.
                   3036: 
                   3037: @item
                   3038: Explicitly instantiate all the template instances you use, and compile
                   3039: with -fno-implicit-templates.  This is probably your best bet; it may
                   3040: require more knowledge of exactly which templates you are using, but
                   3041: it's less mysterious than the previous approach, and it doesn't require
                   3042: any @samp{#pragma}s or other g++-specific code.  You can scatter the
                   3043: instantiations throughout your program, you can create one big file to
                   3044: do all the instantiations, or you can create tiny files like
                   3045: 
                   3046: @example
                   3047: #include "Foo.h"
                   3048: #include "Foo.cc"
                   3049: 
                   3050: template class Foo<int>;
                   3051: @end example
                   3052: 
                   3053: for each instance you need, and create a template instantiation library
                   3054: from those.  I'm partial to the last, but your mileage may vary.  If you
                   3055: are using Cfront-model code, you can probably get away with not using
                   3056: -fno-implicit-templates when compiling files that don't @samp{#include}
                   3057: the member template definitions.
                   3058: @end enumerate
                   3059: 
                   3060: @node C++ Signatures
                   3061: @section Type Abstraction using Signatures
                   3062: 
                   3063: @findex signature
                   3064: @cindex type abstraction, C++
                   3065: @cindex C++ type abstraction
                   3066: @cindex subtype polymorphism, C++
                   3067: @cindex C++ subtype polymorphism
                   3068: @cindex signatures, C++
                   3069: @cindex C++ signatures
                   3070: 
                   3071: In GNU C++, you can use the keyword @code{signature} to define a
                   3072: completely abstract class interface as a datatype.  You can connect this
                   3073: abstraction with actual classes using signature pointers.  If you want
                   3074: to use signatures, run the GNU compiler with the
                   3075: @samp{-fhandle-signatures} command-line option.  (With this option, the
                   3076: compiler reserves a second keyword @code{sigof} as well, for a future
                   3077: extension.)
                   3078: 
                   3079: Roughly, signatures are type abstractions or interfaces of classes.
                   3080: Some other languages have similar facilities.  C++ signatures are
                   3081: related to ML's signatures, Haskell's type classes, definition modules
                   3082: in Modula-2, interface modules in Modula-3, abstract types in Emerald,
                   3083: type modules in Trellis/Owl, categories in Scratchpad II, and types in
                   3084: POOL-I.  For a more detailed discussion of signatures, see
1.1.1.8 ! root     3085: @cite{Signatures: A Language Extension for Improving Type Abstraction and
        !          3086: Subtype Polymorphism in C++}
        !          3087: by @w{Gerald} Baumgartner and Vincent F. Russo (Tech report
        !          3088: CSD--TR--95--051, Dept. of Computer Sciences, Purdue University,
        !          3089: August 1995, a slightly improved version appeared in
        !          3090: @emph{Software---Practice & Experience}, @b{25}(8), pp. 863--889,
        !          3091: August 1995).  You can get the tech report by anonymous FTP from
        !          3092: @code{ftp.cs.purdue.edu} in @file{pub/gb/Signature-design.ps.gz}.
1.1.1.7   root     3093: 
                   3094: Syntactically, a signature declaration is a collection of
                   3095: member function declarations and nested type declarations.
                   3096: For example, this signature declaration defines a new abstract type
                   3097: @code{S} with member functions @samp{int foo ()} and @samp{int bar (int)}:
                   3098: 
                   3099: @example
                   3100: signature S
                   3101: @{
                   3102:   int foo ();
                   3103:   int bar (int);
                   3104: @};
                   3105: @end example
                   3106: 
                   3107: Since signature types do not include implementation definitions, you
                   3108: cannot write an instance of a signature directly.  Instead, you can
                   3109: define a pointer to any class that contains the required interfaces as a
                   3110: @dfn{signature pointer}.  Such a class @dfn{implements} the signature
                   3111: type.
                   3112: @c Eventually signature references should work too.
                   3113: 
                   3114: To use a class as an implementation of @code{S}, you must ensure that
                   3115: the class has public member functions @samp{int foo ()} and @samp{int
                   3116: bar (int)}.  The class can have other member functions as well, public
                   3117: or not; as long as it offers what's declared in the signature, it is
                   3118: suitable as an implementation of that signature type.
                   3119: 
                   3120: For example, suppose that @code{C} is a class that meets the
                   3121: requirements of signature @code{S} (@code{C} @dfn{conforms to}
                   3122: @code{S}).  Then
                   3123: 
                   3124: @example
                   3125: C obj;
                   3126: S * p = &obj;
                   3127: @end example
                   3128: 
                   3129: @noindent
                   3130: defines a signature pointer @code{p} and initializes it to point to an
                   3131: object of type @code{C}.  
                   3132: The member function call @w{@samp{int i = p->foo ();}}
                   3133: executes @samp{obj.foo ()}.
                   3134: 
                   3135: @cindex @code{signature} in C++, advantages
                   3136: Abstract virtual classes provide somewhat similar facilities in standard
                   3137: C++.  There are two main advantages to using signatures instead:
                   3138: 
                   3139: @enumerate
                   3140: @item
                   3141: Subtyping becomes independent from inheritance.  A class or signature
                   3142: type @code{T} is a subtype of a signature type @code{S} independent of
                   3143: any inheritance hierarchy as long as all the member functions declared
                   3144: in @code{S} are also found in @code{T}.  So you can define a subtype
                   3145: hierarchy that is completely independent from any inheritance
                   3146: (implementation) hierarchy, instead of being forced to use types that
                   3147: mirror the class inheritance hierarchy.
                   3148: 
                   3149: @item
                   3150: Signatures allow you to work with existing class hierarchies as
                   3151: implementations of a signature type.  If those class hierarchies are
                   3152: only available in compiled form, you're out of luck with abstract virtual
                   3153: classes, since an abstract virtual class cannot be retrofitted on top of
                   3154: existing class hierarchies.  So you would be required to write interface
                   3155: classes as subtypes of the abstract virtual class.
                   3156: @end enumerate
                   3157: 
                   3158: @cindex default implementation, signature member function
1.1.1.8 ! root     3159: @cindex signature member function default implementation
1.1.1.7   root     3160: There is one more detail about signatures.  A signature declaration can
                   3161: contain member function @emph{definitions} as well as member function
                   3162: declarations.  A signature member function with a full definition is
                   3163: called a @emph{default implementation}; classes need not contain that
                   3164: particular interface in order to conform.  For example, a
                   3165: class @code{C} can conform to the signature
                   3166: 
                   3167: @example
                   3168: signature T
                   3169: @{
                   3170:   int f (int);
                   3171:   int f0 () @{ return f (0); @};
                   3172: @};
                   3173: @end example
                   3174: 
                   3175: @noindent
                   3176: whether or not @code{C} implements the member function @samp{int f0 ()}.
                   3177: If you define @code{C::f0}, that definition takes precedence;
                   3178: otherwise, the default implementation @code{S::f0} applies.
                   3179: 
                   3180: @ignore
                   3181: There will be more support for signatures in the future.
                   3182: Add to this doc as the implementation grows.
                   3183: In particular, the following features are planned but not yet
                   3184: implemented:
                   3185: @itemize @bullet
                   3186: @item signature references,
                   3187: @item signature inheritance,
                   3188: @item the @code{sigof} construct for extracting the signature information
                   3189:       of a class,
                   3190: @item views for renaming member functions when matching a class type
                   3191:       with a signature type,
                   3192: @item specifying exceptions with signature member functions, and
                   3193: @item signature templates.
                   3194: @end itemize
                   3195: This list is roughly in the order in which we intend to implement
                   3196: them.  Watch this space for updates.
                   3197: @end ignore

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.