Annotation of gcc/extend.texi, revision 1.1.1.2

1.1       root        1: @c Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
                      2: @c This is part of the GCC manual.
                      3: @c For copying conditions, see the file gcc.texi.
                      4: 
                      5: @node Extensions, Bugs, Incompatibilities, Top
                      6: @chapter GNU Extensions to the C Language
                      7: @cindex extensions, C language
                      8: @cindex GNU extensions to the C language
                      9: @cindex C language extensions
                     10: 
                     11: GNU C provides several language features not found in ANSI standard C.
                     12: (The @samp{-pedantic} option directs GNU CC to print a warning message if
                     13: any of these features is used.)  To test for the availability of these
                     14: features in conditional compilation, check for a predefined macro
                     15: @code{__GNUC__}, which is always defined under GNU CC.
                     16: 
                     17: @menu
                     18: * Statement Exprs::     Putting statements and declarations inside expressions.
                     19: * Local Labels::        Labels local to a statement-expression.
                     20: * Labels as Values::    Getting pointers to labels, and computed gotos.
                     21: * Nested Functions::    As in Algol and Pascal, lexical scoping of functions.
                     22: * Naming Types::        Giving a name to the type of some expression.
                     23: * Typeof::              @code{typeof}: referring to the type of an expression.
                     24: * Lvalues::             Using @samp{?:}, @samp{,} and casts in lvalues.
                     25: * Conditionals::        Omitting the middle operand of a @samp{?:} expression.
                     26: * Long Long::          Double-word integers---@code{long long int}.
                     27: * Zero Length::         Zero-length arrays.
                     28: * Variable Length::     Arrays whose length is computed at run time.
                     29: * Subscripting::        Any array can be subscripted, even if not an lvalue.
                     30: * Pointer Arith::       Arithmetic on @code{void}-pointers and function pointers.
                     31: * Initializers::        Non-constant initializers.
                     32: * Constructors::        Constructor expressions give structures, unions
                     33:                          or arrays as values.
                     34: * Labeled Elements::   Labeling elements of initializers.
                     35: * Cast to Union::       Casting to union type from any member of the union.
                     36: * Case Ranges::                `case 1 ... 9' and such.
                     37: * Function Attributes:: Declaring that functions have no side effects,
                     38:                          or that they can never return.
                     39: * Dollar Signs::        Dollar sign is allowed in identifiers.
                     40: * Character Escapes::   @samp{\e} stands for the character @key{ESC}.
                     41: * Variable Attributes::        Specifying attributes of variables.
                     42: * Alignment::           Inquiring about the alignment of a type or variable.
                     43: * Inline::              Defining inline functions (as fast as macros).
                     44: * Extended Asm::        Assembler instructions with C expressions as operands.
                     45:                          (With them you can define ``built-in'' functions.)
                     46: * Asm Labels::          Specifying the assembler name to use for a C symbol.
                     47: * Explicit Reg Vars::   Defining variables residing in specified registers.
                     48: * Alternate Keywords::  @code{__const__}, @code{__asm__}, etc., for header files.
                     49: * Incomplete Enums::    @code{enum foo;}, with details to follow.
                     50: @end menu
                     51: 
                     52: @node Statement Exprs
                     53: @section Statements and Declarations within Expressions
                     54: @cindex statements inside expressions
                     55: @cindex declarations inside expressions
                     56: @cindex expressions containing statements
                     57: @cindex macros, statements in expressions
                     58: 
                     59: A compound statement in parentheses may appear inside an expression in GNU
                     60: C.  This allows you to declare variables within an expression.  For
                     61: example:
                     62: 
                     63: @example
                     64: (@{ int y = foo (); int z;
                     65:    if (y > 0) z = y;
                     66:    else z = - y;
                     67:    z; @})
                     68: @end example
                     69: 
                     70: @noindent
                     71: is a valid (though slightly more complex than necessary) expression
                     72: for the absolute value of @code{foo ()}.
                     73: 
                     74: This feature is especially useful in making macro definitions ``safe'' (so
                     75: that they evaluate each operand exactly once).  For example, the
                     76: ``maximum'' function is commonly defined as a macro in standard C as
                     77: follows:
                     78: 
                     79: @example
                     80: #define max(a,b) ((a) > (b) ? (a) : (b))
                     81: @end example
                     82: 
                     83: @noindent
                     84: @cindex side effects, macro argument
                     85: But this definition computes either @var{a} or @var{b} twice, with bad
                     86: results if the operand has side effects.  In GNU C, if you know the
                     87: type of the operands (here let's assume @code{int}), you can define
                     88: the macro safely as follows:
                     89: 
                     90: @example
                     91: #define maxint(a,b) \
                     92:   (@{int _a = (a), _b = (b); _a > _b ? _a : _b; @})
                     93: @end example
                     94: 
                     95: Embedded statements are not allowed in constant expressions, such as
                     96: the value of an enumeration constant, the width of a bit field, or
                     97: the initial value of a static variable.
                     98: 
                     99: If you don't know the type of the operand, you can still do this, but you
                    100: must use @code{typeof} (@pxref{Typeof}) or type naming (@pxref{Naming
                    101: Types}).
                    102: 
                    103: @node Local Labels
                    104: @section Locally Declared Labels
                    105: @cindex local labels
                    106: @cindex macros, local labels
                    107: 
                    108: Each statement expression is a scope in which @dfn{local labels} can be
                    109: declared.  A local label is simply an identifier; you can jump to it
                    110: with an ordinary @code{goto} statement, but only from within the
                    111: statement expression it belongs to.
                    112: 
                    113: A local label declaration looks like this:
                    114: 
                    115: @example
                    116: __label__ @var{label};
                    117: @end example
                    118: 
                    119: @noindent
                    120: or
                    121: 
                    122: @example
                    123: __label__ @var{label1}, @var{label2}, @dots{};
                    124: @end example
                    125: 
                    126: Local label declarations must come at the beginning of the statement
                    127: expression, right after the @samp{(@{}, before any ordinary
                    128: declarations.
                    129: 
                    130: The label declaration defines the label @emph{name}, but does not define
                    131: the label itself.  You must do this in the usual way, with
                    132: @code{@var{label}:}, within the statements of the statement expression.
                    133: 
                    134: The local label feature is useful because statement expressions are
                    135: often used in macros.  If the macro contains nested loops, a @code{goto}
                    136: can be useful for breaking out of them.  However, an ordinary label
                    137: whose scope is the whole function cannot be used: if the macro can be
                    138: expanded several times in one function, the label will be multiply
                    139: defined in that function.  A local label avoids this problem.  For
                    140: example:
                    141: 
                    142: @example
                    143: #define SEARCH(array, target)                     \
                    144: (@{                                               \
                    145:   __label__ found;                                \
                    146:   typeof (target) _SEARCH_target = (target);      \
                    147:   typeof (*(array)) *_SEARCH_array = (array);     \
                    148:   int i, j;                                       \
                    149:   int value;                                      \
                    150:   for (i = 0; i < max; i++)                       \
                    151:     for (j = 0; j < max; j++)                     \
                    152:       if (_SEARCH_array[i][j] == _SEARCH_target)  \
                    153:         @{ value = i; goto found; @}              \
                    154:   value = -1;                                     \
                    155:  found:                                           \
                    156:   value;                                          \
                    157: @})
                    158: @end example
                    159: 
                    160: @node Labels as Values
                    161: @section Labels as Values
                    162: @cindex labels as values
                    163: @cindex computed gotos
                    164: @cindex goto with computed label 
                    165: @cindex address of a label
                    166: 
                    167: You can get the address of a label defined in the current function
                    168: (or a containing function) with the unary operator @samp{&&}.  The
                    169: value has type @code{void *}.  This value is a constant and can be used 
                    170: wherever a constant of that type is valid.  For example:
                    171: 
                    172: @example
                    173: void *ptr;
                    174: @dots{}
                    175: ptr = &&foo;
                    176: @end example
                    177: 
                    178: To use these values, you need to be able to jump to one.  This is done
                    179: with the computed goto statement@footnote{The analogous feature in
                    180: Fortran is called an assigned goto, but that name seems inappropriate in
                    181: C, where one can do more than simply store label addresses in label
                    182: variables.}, @code{goto *@var{exp};}.  For example,
                    183: 
                    184: @example
                    185: goto *ptr;
                    186: @end example
                    187: 
                    188: @noindent
                    189: Any expression of type @code{void *} is allowed.
                    190: 
                    191: One way of using these constants is in initializing a static array that
                    192: will serve as a jump table:
                    193: 
                    194: @example
                    195: static void *array[] = @{ &&foo, &&bar, &&hack @};
                    196: @end example
                    197: 
                    198: Then you can select a label with indexing, like this:
                    199: 
                    200: @example
                    201: goto *array[i];
                    202: @end example
                    203: 
                    204: @noindent
                    205: Note that this does not check whether the subscript is in bounds---array
                    206: indexing in C never does that.
                    207: 
                    208: Such an array of label values serves a purpose much like that of the
                    209: @code{switch} statement.  The @code{switch} statement is cleaner, so
                    210: use that rather than an array unless the problem does not fit a
                    211: @code{switch} statement very well.
                    212: 
                    213: Another use of label values is in an interpreter for threaded code.
                    214: The labels within the interpreter function can be stored in the
                    215: threaded code for super-fast dispatching.  
                    216: 
                    217: @node Nested Functions
                    218: @section Nested Functions
                    219: @cindex nested functions
                    220: @cindex downward funargs
                    221: @cindex thunks
                    222: 
                    223: A @dfn{nested function} is a function defined inside another function.
                    224: The nested function's name is local to the block where it is defined.
                    225: For example, here we define a nested function named @code{square},
                    226: and call it twice:
                    227: 
                    228: @example
                    229: foo (double a, double b)
                    230: @{
                    231:   double square (double z) @{ return z * z; @}
                    232: 
                    233:   return square (a) + square (b);
                    234: @}
                    235: @end example
                    236: 
                    237: The nested function can access all the variables of the containing
                    238: function that are visible at the point of its definition.  This is
                    239: called @dfn{lexical scoping}.  For example, here we show a nested
                    240: function which uses an inherited variable named @code{offset}:
                    241: 
                    242: @example
                    243: bar (int *array, int offset, int size)
                    244: @{
                    245:   int access (int *array, int index)
                    246:     @{ return array[index + offset]; @}
                    247:   int i;
                    248:   @dots{}
                    249:   for (i = 0; i < size; i++)
                    250:     @dots{} access (array, i) @dots{}
                    251: @}
                    252: @end example
                    253: 
                    254: It is possible to call the nested function from outside the scope of its
                    255: name by storing its address or passing the address to another function:
                    256: 
                    257: @example
                    258: hack (int *array, int size)
                    259: @{
                    260:   void store (int index, int value)
                    261:     @{ array[index] = value; @}
                    262: 
                    263:   intermediate (store, size);
                    264: @}
                    265: @end example
                    266: 
                    267: Here, the function @code{intermediate} receives the address of
                    268: @code{store} as an argument.  If @code{intermediate} calls
                    269: @code{store}, the arguments given to @code{store} are used to store
                    270: into @code{array}.  But this technique works only so long as the
                    271: containing function (@code{hack}, in this example) does not exit.  If
                    272: you try to call the nested function through its address after the
                    273: containing function has exited, all hell will break loose.
                    274: 
                    275: A nested function can jump to a label inherited from a containing
                    276: function, provided the label was explicitly declared in the containing
                    277: function (@pxref{Local Labels}).  Such a jump returns instantly to the
                    278: containing function, exiting the nested function which did the
                    279: @code{goto} and any intermediate functions as well.  Here is an example:
                    280: 
                    281: @example
                    282: bar (int *array, int offset, int size)
                    283: @{
                    284:   __label__ failure;
                    285:   int access (int *array, int index)
                    286:     @{
                    287:       if (index > size)
                    288:         goto failure;
                    289:       return array[index + offset];
                    290:     @}
                    291:   int i;
                    292:   @dots{}
                    293:   for (i = 0; i < size; i++)
                    294:     @dots{} access (array, i) @dots{}
                    295:   @dots{}
                    296:   return 0;
                    297: 
                    298:  /* @r{Control comes here from @code{access}
                    299:     if it detects an error.}  */
                    300:  failure:
                    301:   return -1;
                    302: @}
                    303: @end example
                    304: 
                    305: A nested function always has internal linkage.  Declaring one with
                    306: @code{extern} is erroneous.  If you need to declare the nested function
                    307: before its definition, use @code{auto} (which is otherwise meaningless
                    308: for function declarations).
                    309: 
                    310: @example
                    311: bar (int *array, int offset, int size)
                    312: @{
                    313:   __label__ failure;
                    314:   auto int access (int *, int);
                    315:   @dots{}
                    316:   int access (int *array, int index)
                    317:     @{
                    318:       if (index > size)
                    319:         goto failure;
                    320:       return array[index + offset];
                    321:     @}
                    322:   @dots{}
                    323: @}
                    324: @end example
                    325: 
                    326: @node Naming Types
                    327: @section Naming an Expression's Type
                    328: @cindex naming types
                    329: 
                    330: You can give a name to the type of an expression using a @code{typedef}
                    331: declaration with an initializer.  Here is how to define @var{name} as a
                    332: type name for the type of @var{exp}:
                    333: 
                    334: @example
                    335: typedef @var{name} = @var{exp};
                    336: @end example
                    337: 
                    338: This is useful in conjunction with the statements-within-expressions
                    339: feature.  Here is how the two together can be used to define a safe
                    340: ``maximum'' macro that operates on any arithmetic type:
                    341: 
                    342: @example
                    343: #define max(a,b) \
                    344:   (@{typedef _ta = (a), _tb = (b);  \
                    345:     _ta _a = (a); _tb _b = (b);     \
                    346:     _a > _b ? _a : _b; @})
                    347: @end example
                    348: 
                    349: @cindex underscores in variables in macros
                    350: @cindex @samp{_} in variables in macros
                    351: @cindex local variables in macros
                    352: @cindex variables, local, in macros
                    353: @cindex macros, local variables in
                    354: 
                    355: The reason for using names that start with underscores for the local
                    356: variables is to avoid conflicts with variable names that occur within the
                    357: expressions that are substituted for @code{a} and @code{b}.  Eventually we
                    358: hope to design a new form of declaration syntax that allows you to declare
                    359: variables whose scopes start only after their initializers; this will be a
                    360: more reliable way to prevent such conflicts.
                    361: 
                    362: @node Typeof
                    363: @section Referring to a Type with @code{typeof}
                    364: @findex typeof
                    365: @findex sizeof
                    366: @cindex macros, types of arguments
                    367: 
                    368: Another way to refer to the type of an expression is with @code{typeof}.
                    369: The syntax of using of this keyword looks like @code{sizeof}, but the
                    370: construct acts semantically like a type name defined with @code{typedef}.
                    371: 
                    372: There are two ways of writing the argument to @code{typeof}: with an
                    373: expression or with a type.  Here is an example with an expression:
                    374: 
                    375: @example
                    376: typeof (x[0](1))
                    377: @end example
                    378: 
                    379: @noindent
                    380: This assumes that @code{x} is an array of functions; the type described
                    381: is that of the values of the functions.
                    382: 
                    383: Here is an example with a typename as the argument:
                    384: 
                    385: @example
                    386: typeof (int *)
                    387: @end example
                    388: 
                    389: @noindent
                    390: Here the type described is that of pointers to @code{int}.
                    391: 
                    392: If you are writing a header file that must work when included in ANSI C
                    393: programs, write @code{__typeof__} instead of @code{typeof}.
                    394: @xref{Alternate Keywords}.
                    395: 
                    396: A @code{typeof}-construct can be used anywhere a typedef name could be
                    397: used.  For example, you can use it in a declaration, in a cast, or inside
                    398: of @code{sizeof} or @code{typeof}.
                    399: 
                    400: @itemize @bullet
                    401: @item
                    402: This declares @code{y} with the type of what @code{x} points to.
                    403: 
                    404: @example
                    405: typeof (*x) y;
                    406: @end example
                    407: 
                    408: @item
                    409: This declares @code{y} as an array of such values.
                    410: 
                    411: @example
                    412: typeof (*x) y[4];
                    413: @end example
                    414: 
                    415: @item
                    416: This declares @code{y} as an array of pointers to characters:
                    417: 
                    418: @example
                    419: typeof (typeof (char *)[4]) y;
                    420: @end example
                    421: 
                    422: @noindent
                    423: It is equivalent to the following traditional C declaration:
                    424: 
                    425: @example
                    426: char *y[4];
                    427: @end example
                    428: 
                    429: To see the meaning of the declaration using @code{typeof}, and why it
                    430: might be a useful way to write, let's rewrite it with these macros:
                    431: 
                    432: @example
                    433: #define pointer(T)  typeof(T *)
                    434: #define array(T, N) typeof(T [N])
                    435: @end example
                    436: 
                    437: @noindent
                    438: Now the declaration can be rewritten this way:
                    439: 
                    440: @example
                    441: array (pointer (char), 4) y;
                    442: @end example
                    443: 
                    444: @noindent
                    445: Thus, @code{array (pointer (char), 4)} is the type of arrays of 4
                    446: pointers to @code{char}.
                    447: @end itemize
                    448: 
                    449: @node Lvalues
                    450: @section Generalized Lvalues
                    451: @cindex compound expressions as lvalues
                    452: @cindex expressions, compound, as lvalues
                    453: @cindex conditional expressions as lvalues
                    454: @cindex expressions, conditional, as lvalues
                    455: @cindex casts as lvalues
                    456: @cindex generalized lvalues
                    457: @cindex lvalues, generalized
                    458: @cindex extensions, @code{?:}
                    459: @cindex @code{?:} extensions
                    460: Compound expressions, conditional expressions and casts are allowed as
                    461: lvalues provided their operands are lvalues.  This means that you can take
                    462: their addresses or store values into them.
                    463: 
                    464: For example, a compound expression can be assigned, provided the last
                    465: expression in the sequence is an lvalue.  These two expressions are
                    466: equivalent:
                    467: 
                    468: @example
                    469: (a, b) += 5
                    470: a, (b += 5)
                    471: @end example
                    472: 
                    473: Similarly, the address of the compound expression can be taken.  These two
                    474: expressions are equivalent:
                    475: 
                    476: @example
                    477: &(a, b)
                    478: a, &b
                    479: @end example
                    480: 
                    481: A conditional expression is a valid lvalue if its type is not void and the
                    482: true and false branches are both valid lvalues.  For example, these two
                    483: expressions are equivalent:
                    484: 
                    485: @example
                    486: (a ? b : c) = 5
                    487: (a ? b = 5 : (c = 5))
                    488: @end example
                    489: 
                    490: A cast is a valid lvalue if its operand is an lvalue.  A simple
                    491: assignment whose left-hand side is a cast works by converting the
                    492: right-hand side first to the specified type, then to the type of the
                    493: inner left-hand side expression.  After this is stored, the value is
                    494: converted back to the specified type to become the value of the
                    495: assignment.  Thus, if @code{a} has type @code{char *}, the following two
                    496: expressions are equivalent:
                    497: 
                    498: @example
                    499: (int)a = 5
                    500: (int)(a = (char *)(int)5)
                    501: @end example
                    502: 
                    503: An assignment-with-arithmetic operation such as @samp{+=} applied to a cast
                    504: performs the arithmetic using the type resulting from the cast, and then
                    505: continues as in the previous case.  Therefore, these two expressions are
                    506: equivalent:
                    507: 
                    508: @example
                    509: (int)a += 5
                    510: (int)(a = (char *)(int) ((int)a + 5))
                    511: @end example
                    512: 
                    513: You cannot take the address of an lvalue cast, because the use of its
                    514: address would not work out coherently.  Suppose that @code{&(int)f} were
                    515: permitted, where @code{f} has type @code{float}.  Then the following
                    516: statement would try to store an integer bit-pattern where a floating
                    517: point number belongs:
                    518: 
                    519: @example
                    520: *&(int)f = 1;
                    521: @end example
                    522: 
                    523: This is quite different from what @code{(int)f = 1} would do---that
                    524: would convert 1 to floating point and store it.  Rather than cause this
1.1.1.2 ! root      525: inconsistency, we think it is better to prohibit use of @samp{&} on a cast.
1.1       root      526: 
                    527: If you really do want an @code{int *} pointer with the address of
                    528: @code{f}, you can simply write @code{(int *)&f}.
                    529: 
                    530: @node Conditionals
                    531: @section Conditional Expressions with Omitted Operands
                    532: @cindex conditional expressions, extensions
                    533: @cindex omitted middle-operands
                    534: @cindex middle-operands, omitted
                    535: @cindex extensions, @code{?:}
                    536: @cindex @code{?:} extensions
                    537: 
                    538: The middle operand in a conditional expression may be omitted.  Then
                    539: if the first operand is nonzero, its value is the value of the conditional
                    540: expression.
                    541: 
                    542: Therefore, the expression
                    543: 
                    544: @example
                    545: x ? : y
                    546: @end example
                    547: 
                    548: @noindent
                    549: has the value of @code{x} if that is nonzero; otherwise, the value of
                    550: @code{y}.
                    551: 
                    552: This example is perfectly equivalent to
                    553: 
                    554: @example
                    555: x ? x : y
                    556: @end example
                    557: 
                    558: @cindex side effect in ?:
                    559: @cindex ?: side effect
                    560: @noindent
                    561: In this simple case, the ability to omit the middle operand is not
                    562: especially useful.  When it becomes useful is when the first operand does,
                    563: or may (if it is a macro argument), contain a side effect.  Then repeating
                    564: the operand in the middle would perform the side effect twice.  Omitting
                    565: the middle operand uses the value already computed without the undesirable
                    566: effects of recomputing it.
                    567: 
                    568: @node Long Long
                    569: @section Double-Word Integers
                    570: @cindex @code{long long} data types
                    571: @cindex double-word arithmetic
                    572: @cindex multiprecision arithmetic
                    573: 
                    574: GNU C supports data types for integers that are twice as long as
                    575: @code{long int}.  Simply write @code{long long int} for a signed
                    576: integer, or @code{unsigned long long int} for an unsigned integer.
                    577: 
                    578: You can use these types in arithmetic like any other integer types.
                    579: Addition, subtraction, and bitwise boolean operations on these types
                    580: are open-coded on all types of machines.  Multiplication is open-coded
                    581: if the machine supports fullword-to-doubleword a widening multiply
                    582: instruction.  Division and shifts are open-coded only on machines that
                    583: provide special support.  The operations that are not open-coded use
                    584: special library routines that come with GNU CC.
                    585: 
                    586: There may be pitfalls when you use @code{long long} types for function
                    587: arguments, unless you declare function prototypes.  If a function
                    588: expects type @code{int} for its argument, and you pass a value of type
                    589: @code{long long int}, confusion will result because the caller and the
                    590: subroutine will disagree about the number of bytes for the argument.
                    591: Likewise, if the function expects @code{long long int} and you pass
                    592: @code{int}.  The best way to avoid such problems is to use prototypes.
                    593: 
                    594: @node Zero Length
                    595: @section Arrays of Length Zero
                    596: @cindex arrays of length zero
                    597: @cindex zero-length arrays
                    598: @cindex length-zero arrays
                    599: 
                    600: Zero-length arrays are allowed in GNU C.  They are very useful as the last
                    601: element of a structure which is really a header for a variable-length
                    602: object:
                    603: 
                    604: @example
                    605: struct line @{
                    606:   int length;
                    607:   char contents[0];
                    608: @};
                    609: 
                    610: @{
                    611:   struct line *thisline = (struct line *)
                    612:     malloc (sizeof (struct line) + this_length);
                    613:   thisline->length = this_length;
                    614: @}
                    615: @end example
                    616: 
                    617: In standard C, you would have to give @code{contents} a length of 1, which
                    618: means either you waste space or complicate the argument to @code{malloc}.
                    619: 
                    620: @node Variable Length
                    621: @section Arrays of Variable Length
                    622: @cindex variable-length arrays
                    623: @cindex arrays of variable length
                    624: 
                    625: Variable-length automatic arrays are allowed in GNU C.  These arrays are
                    626: declared like any other automatic arrays, but with a length that is not
                    627: a constant expression.  The storage is allocated at the point of
                    628: declaration and deallocated when the brace-level is exited.  For
                    629: example:
                    630: 
                    631: @example
                    632: FILE *
                    633: concat_fopen (char *s1, char *s2, char *mode)
                    634: @{
                    635:   char str[strlen (s1) + strlen (s2) + 1];
                    636:   strcpy (str, s1);
                    637:   strcat (str, s2);
                    638:   return fopen (str, mode);
                    639: @}
                    640: @end example
                    641: 
                    642: @cindex scope of a variable length array
                    643: @cindex variable-length array scope
                    644: @cindex deallocating variable length arrays
                    645: Jumping or breaking out of the scope of the array name deallocates the
                    646: storage.  Jumping into the scope is not allowed; you get an error
                    647: message for it.
                    648: 
                    649: @cindex @code{alloca} vs variable-length arrays
                    650: You can use the function @code{alloca} to get an effect much like
                    651: variable-length arrays.  The function @code{alloca} is available in
                    652: many other C implementations (but not in all).  On the other hand,
                    653: variable-length arrays are more elegant.
                    654: 
                    655: There are other differences between these two methods.  Space allocated
                    656: with @code{alloca} exists until the containing @emph{function} returns.
                    657: The space for a variable-length array is deallocated as soon as the array
                    658: name's scope ends.  (If you use both variable-length arrays and
                    659: @code{alloca} in the same function, deallocation of a variable-length array
                    660: will also deallocate anything more recently allocated with @code{alloca}.)
                    661: 
                    662: You can also use variable-length arrays as arguments to functions:
                    663: 
                    664: @example
                    665: struct entry
                    666: tester (int len, char data[len][len])
                    667: @{
                    668:   @dots{}
                    669: @}
                    670: @end example
                    671: 
                    672: The length of an array is computed once when the storage is allocated
                    673: and is remembered for the scope of the array in case you access it with
                    674: @code{sizeof}.
                    675: 
                    676: If you want to pass the array first and the length afterward, you can
                    677: use a forward declaration in the parameter list---another GNU extension.
                    678: 
                    679: @example
                    680: struct entry
                    681: tester (int len; char data[len][len], int len)
                    682: @{
                    683:   @dots{}
                    684: @}
                    685: @end example
                    686: 
                    687: @cindex parameter forward declaration
                    688: The @samp{int len} before the semicolon is a @dfn{parameter forward
                    689: declaration}, and it serves the purpose of making the name @code{len}
                    690: known when the declaration of @code{data} is parsed.
                    691: 
                    692: You can write any number of such parameter forward declarations in the
                    693: parameter list.  They can be separated by commas or semicolons, but the
                    694: last one must end with a semicolon, which is followed by the ``real''
                    695: parameter declarations.  Each forward declaration must match a ``real''
                    696: declaration in parameter name and data type.
                    697: 
                    698: @node Subscripting
                    699: @section Non-Lvalue Arrays May Have Subscripts
                    700: @cindex subscripting
                    701: @cindex arrays, non-lvalue
                    702: 
                    703: @cindex subscripting and function values
                    704: Subscripting is allowed on arrays that are not lvalues, even though the
                    705: unary @samp{&} operator is not.  For example, this is valid in GNU C though
                    706: not valid in other C dialects:
                    707: 
                    708: @example
                    709: struct foo @{int a[4];@};
                    710: 
                    711: struct foo f();
                    712: 
                    713: bar (int index)
                    714: @{
                    715:   return f().a[index];
                    716: @}
                    717: @end example
                    718: 
                    719: @node Pointer Arith
                    720: @section Arithmetic on @code{void}- and Function-Pointers
                    721: @cindex void pointers, arithmetic
                    722: @cindex void, size of pointer to
                    723: @cindex function pointers, arithmetic
                    724: @cindex function, size of pointer to
                    725: 
                    726: In GNU C, addition and subtraction operations are supported on pointers to
                    727: @code{void} and on pointers to functions.  This is done by treating the
                    728: size of a @code{void} or of a function as 1.
                    729: 
                    730: A consequence of this is that @code{sizeof} is also allowed on @code{void}
                    731: and on function types, and returns 1.
                    732: 
                    733: The option @samp{-Wpointer-arith} requests a warning if these extensions
                    734: are used.
                    735: 
                    736: @node Initializers
                    737: @section Non-Constant Initializers
                    738: @cindex initializers, non-constant
                    739: @cindex non-constant initializers
                    740: 
                    741: The elements of an aggregate initializer for an automatic variable are
                    742: not required to be constant expressions in GNU C.  Here is an example of
                    743: an initializer with run-time varying elements:
                    744: 
                    745: @example
                    746: foo (float f, float g)
                    747: @{
                    748:   float beat_freqs[2] = @{ f-g, f+g @};
                    749:   @dots{}
                    750: @}
                    751: @end example
                    752: 
                    753: @node Constructors
                    754: @section Constructor Expressions
                    755: @cindex constructor expressions
                    756: @cindex initializations in expressions
                    757: @cindex structures, constructor expression
                    758: @cindex expressions, constructor 
                    759: 
                    760: GNU C supports constructor expressions.  A constructor looks like
                    761: a cast containing an initializer.  Its value is an object of the
                    762: type specified in the cast, containing the elements specified in
                    763: the initializer.
                    764: 
                    765: Usually, the specified type is a structure.  Assume that
                    766: @code{struct foo} and @code{structure} are declared as shown:
                    767: 
                    768: @example
                    769: struct foo @{int a; char b[2];@} structure;
                    770: @end example
                    771: 
                    772: @noindent
                    773: Here is an example of constructing a @code{struct foo} with a constructor:
                    774: 
                    775: @example
                    776: structure = ((struct foo) @{x + y, 'a', 0@});
                    777: @end example
                    778: 
                    779: @noindent
                    780: This is equivalent to writing the following:
                    781: 
                    782: @example
                    783: @{
                    784:   struct foo temp = @{x + y, 'a', 0@};
                    785:   structure = temp;
                    786: @}
                    787: @end example
                    788: 
                    789: You can also construct an array.  If all the elements of the constructor
                    790: are (made up of) simple constant expressions, suitable for use in
                    791: initializers, then the constructor is an lvalue and can be coerced to a
                    792: pointer to its first element, as shown here:
                    793: 
                    794: @example
                    795: char **foo = (char *[]) @{ "x", "y", "z" @};
                    796: @end example
                    797: 
                    798: Array constructors whose elements are not simple constants are
                    799: not very useful, because the constructor is not an lvalue.  There
                    800: are only two valid ways to use it: to subscript it, or initialize
                    801: an array variable with it.  The former is probably slower than a
                    802: @code{switch} statement, while the latter does the same thing an
                    803: ordinary C initializer would do.  Here is an example of
                    804: subscripting an array constructor:
                    805: 
                    806: @example
                    807: output = ((int[]) @{ 2, x, 28 @}) [input];
                    808: @end example
                    809: 
                    810: Constructor expressions for scalar types and union types are is
                    811: also allowed, but then the constructor expression is equivalent
                    812: to a cast.
                    813: 
                    814: @node Labeled Elements
                    815: @section Labeled Elements in Initializers
                    816: @cindex initializers with labeled elements
                    817: @cindex labeled elements in initializers
                    818: @cindex case labels in initializers
                    819: 
                    820: Standard C requires the elements of an initializer to appear in a fixed
                    821: order, the same as the order of the elements in the array or structure
                    822: being initialized.
                    823: 
                    824: In GNU C you can give the elements in any order, specifying the array
                    825: indices or structure field names they apply to.
                    826: 
                    827: To specify an array index, write @samp{[@var{index}]} before the
                    828: element value.  For example,
                    829: 
                    830: @example
                    831: int a[6] = @{ [4] 29, [2] 15 @};
                    832: @end example
                    833: 
                    834: @noindent
                    835: is equivalent to
                    836: 
                    837: @example
                    838: int a[6] = @{ 0, 0, 15, 0, 29, 0 @};
                    839: @end example
                    840: 
                    841: @noindent
                    842: The index values must be constant expressions, even if the array being
                    843: initialized is automatic.
                    844: 
                    845: In a structure initializer, specify the name of a field to initialize
                    846: with @samp{@var{fieldname}:} before the element value.  For example,
                    847: given the following structure, 
                    848: 
                    849: @example
                    850: struct point @{ int x, y; @};
                    851: @end example
                    852: 
                    853: @noindent
                    854: the following initialization
                    855: 
                    856: @example
                    857: struct point p = @{ y: yvalue, x: xvalue @};
                    858: @end example
                    859: 
                    860: @noindent
                    861: is equivalent to
                    862: 
                    863: @example
                    864: struct point p = @{ xvalue, yvalue @};
                    865: @end example
                    866: 
                    867: You can also use an element label when initializing a union, to
                    868: specify which element of the union should be used.  For example,
                    869: 
                    870: @example
                    871: union foo @{ int i; double d; @};
                    872: 
                    873: union foo f = @{ d: 4 @};
                    874: @end example
                    875: 
                    876: @noindent
                    877: will convert 4 to a @code{double} to store it in the union using
                    878: the second element.  By contrast, casting 4 to type @code{union foo}
                    879: would store it into the union as the integer @code{i}, since it is
                    880: an integer.  (@xref{Cast to Union}.)
                    881: 
                    882: You can combine this technique of naming elements with ordinary C
                    883: initialization of successive elements.  Each initializer element that
                    884: does not have a label applies to the next consecutive element of the
                    885: array or structure.  For example,
                    886: 
                    887: @example
                    888: int a[6] = @{ [1] v1, v2, [4] v4 @};
                    889: @end example
                    890: 
                    891: @noindent
                    892: is equivalent to
                    893: 
                    894: @example
                    895: int a[6] = @{ 0, v1, v2, 0, v4, 0 @};
                    896: @end example
                    897: 
                    898: Labeling the elements of an array initializer is especially useful
                    899: when the indices are characters or belong to an @code{enum} type.
                    900: For example:
                    901: 
                    902: @example
                    903: int whitespace[256]
                    904:   = @{ [' '] 1, ['\t'] 1, ['\h'] 1,
                    905:       ['\f'] 1, ['\n'] 1, ['\r'] 1 @};
                    906: @end example
                    907: 
                    908: @node Case Ranges
                    909: @section Case Ranges
                    910: @cindex case ranges
                    911: @cindex ranges in case statements
                    912: 
                    913: You can specify a range of consecutive values in a single @code{case} label,
                    914: like this:
                    915: 
                    916: @example
                    917: case @var{low} ... @var{high}:
                    918: @end example
                    919: 
                    920: @noindent
                    921: This has the same effect as the proper number of individual @code{case}
                    922: labels, one for each integer value from @var{low} to @var{high}, inclusive.
                    923: 
                    924: This feature is especially useful for ranges of ASCII character codes:
                    925: 
                    926: @example
                    927: case 'A' ... 'Z':
                    928: @end example
                    929: 
                    930: @strong{Be careful:} Write spaces around the @code{...}, for otherwise
                    931: it may be parsed wrong when you use it with integer values.  For example,
                    932: write this:
                    933: 
                    934: @example
                    935: case 1 ... 5:
                    936: @end example
                    937: 
                    938: @noindent 
                    939: rather than this:
                    940: 
                    941: @example
                    942: case 1...5:
                    943: @end example
                    944: 
                    945: @node Cast to Union
                    946: @section Cast to a Union Type
                    947: @cindex cast to a union
                    948: @cindex union, casting to a 
                    949: 
                    950: A cast to union type is like any other cast, except that the type
                    951: specified is a union type.  You can specify the type either with
                    952: @code{union @var{tag}} or with a typedef name.
                    953: 
                    954: The types that may be cast to the union type are those of the members
                    955: of the union.  Thus, given the following union and variables:
                    956: 
                    957: @example
                    958: union foo @{ int i; double d; @};
                    959: int x;
                    960: double y;
                    961: @end example
                    962: 
                    963: @noindent
                    964: both @code{x} and @code{y} can be cast to type @code{union} foo.
                    965: 
                    966: Using the cast as the right-hand side of an assignment to a variable of
                    967: union type is equivalent to storing in a member of the union:
                    968: 
                    969: @example
                    970: union foo u;
                    971: @dots{}
                    972: u = (union foo) x  @equiv{}  u.i = x
                    973: u = (union foo) y  @equiv{}  u.d = y
                    974: @end example
                    975: 
                    976: You can also use the union cast as a function argument:
                    977: 
                    978: @example
                    979: void hack (union foo);
                    980: @dots{}
                    981: hack ((union foo) x);
                    982: @end example
                    983: 
                    984: @node Function Attributes
                    985: @section Declaring Attributes of Functions
                    986: @cindex function attributes
                    987: @cindex declaring attributes of functions
                    988: @cindex functions that never return
                    989: @cindex functions that have no side effects
                    990: @cindex @code{volatile} applied to function
                    991: @cindex @code{const} applied to function
                    992: 
                    993: In GNU C, you declare certain things about functions called in your program
                    994: which help the compiler optimize function calls.
                    995: 
                    996: A few standard library functions, such as @code{abort} and @code{exit},
                    997: cannot return.  GNU CC knows this automatically.  Some programs define
                    998: their own functions that never return.  You can declare them
                    999: @code{volatile} to tell the compiler this fact.  For example,
                   1000: 
                   1001: @example
                   1002: extern void volatile fatal ();
                   1003: 
                   1004: void
                   1005: fatal (@dots{})
                   1006: @{
                   1007:   @dots{} /* @r{Print error message.} */ @dots{}
                   1008:   exit (1);
                   1009: @}
                   1010: @end example
                   1011: 
                   1012: The @code{volatile} keyword tells the compiler to assume that
                   1013: @code{fatal} cannot return.  This makes slightly better code, but more
                   1014: importantly it helps avoid spurious warnings of uninitialized variables.
                   1015: 
                   1016: It does not make sense for a @code{volatile} function to have a return
                   1017: type other than @code{void}.
                   1018: 
                   1019: Many functions do not examine any values except their arguments, and
                   1020: have no effects except the return value.  Such a function can be subject
                   1021: to common subexpression elimination and loop optimization just as an
                   1022: arithmetic operator would be.  These functions should be declared
                   1023: @code{const}.  For example,
                   1024: 
                   1025: @example
                   1026: extern int const square ();
                   1027: @end example
                   1028: 
                   1029: @noindent
                   1030: says that the hypothetical function @code{square} is safe to call
                   1031: fewer times than the program says.
                   1032: 
                   1033: @cindex pointer arguments
                   1034: Note that a function that has pointer arguments and examines the data
                   1035: pointed to must @emph{not} be declared @code{const}.  Likewise, a
                   1036: function that calls a non-@code{const} function usually must not be
                   1037: @code{const}.  It does not make sense for a @code{const} function to
                   1038: return @code{void}.
                   1039: 
                   1040: We recommend placing the keyword @code{const} after the function's
                   1041: return type.  It makes no difference in the example above, but when the
                   1042: return type is a pointer, it is the only way to make the function itself
                   1043: const.  For example,
                   1044: 
                   1045: @example
                   1046: const char *mincp (int);
                   1047: @end example
                   1048: 
                   1049: @noindent
                   1050: says that @code{mincp} returns @code{const char *}---a pointer to a
                   1051: const object.  To declare @code{mincp} const, you must write this:
                   1052: 
                   1053: @example
                   1054: char * const mincp (int);
                   1055: @end example
                   1056:   
                   1057: @cindex @code{#pragma}, reason for not using
                   1058: @cindex pragma, reason for not using
                   1059: Some people object to this feature, suggesting that ANSI C's
                   1060: @code{#pragma} should be used instead.  There are two reasons for not
                   1061: doing this.
                   1062: 
                   1063: @enumerate
                   1064: @item
                   1065: It is impossible to generate @code{#pragma} commands from a macro.
                   1066: 
                   1067: @item
                   1068: The @code{#pragma} command is just as likely as these keywords to mean
                   1069: something else in another compiler.
                   1070: @end enumerate
                   1071: 
                   1072: These two reasons apply to almost any application that might be proposed
                   1073: for @code{#pragma}.  It is basically a mistake to use @code{#pragma} for
                   1074: @emph{anything}.
                   1075: 
                   1076: @node Dollar Signs
                   1077: @section Dollar Signs in Identifier Names
                   1078: @cindex $
                   1079: @cindex dollar signs in identifier names
                   1080: @cindex identifier names, dollar signs in
                   1081: 
                   1082: In GNU C, you may use dollar signs in identifier names.  This is because
                   1083: many traditional C implementations allow such identifiers.
                   1084: 
                   1085: Dollar signs are allowed on certain machines if you specify
                   1086: @samp{-traditional}.  On a few systems they are allowed by default, even
                   1087: if @samp{-traditional} is not used.  But they are never allowed if you
                   1088: specify @samp{-ansi}.
                   1089: 
                   1090: There are certain ANSI C programs (obscure, to be sure) that would
                   1091: compile incorrectly if dollar signs were permitted in identifiers.  For
                   1092: example:
                   1093: 
                   1094: @example
                   1095: #define foo(a) #a
                   1096: #define lose(b) foo (b)
                   1097: #define test$
                   1098: lose (test)
                   1099: @end example
                   1100: 
                   1101: @node Character Escapes
                   1102: @section The Character @key{ESC} in Constants
                   1103: 
                   1104: You can use the sequence @samp{\e} in a string or character constant to
                   1105: stand for the ASCII character @key{ESC}.
                   1106: 
                   1107: @node Alignment
                   1108: @section Inquiring on Alignment of Types or Variables
                   1109: @cindex alignment
                   1110: @cindex type alignment
                   1111: @cindex variable alignment
                   1112: 
                   1113: The keyword @code{__alignof__} allows you to inquire about how an object
                   1114: is aligned, or the minimum alignment usually required by a type.  Its
                   1115: syntax is just like @code{sizeof}.
                   1116: 
                   1117: For example, if the target machine requires a @code{double} value to be
                   1118: aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
                   1119: This is true on many RISC machines.  On more traditional machine
                   1120: designs, @code{__alignof__ (double)} is 4 or even 2.
                   1121: 
                   1122: Some machines never actually require alignment; they allow reference to any
                   1123: data type even at an odd addresses.  For these machines, @code{__alignof__}
                   1124: reports the @emph{recommended} alignment of a type.
                   1125: 
                   1126: When the operand of @code{__alignof__} is an lvalue rather than a type, the
                   1127: value is the largest alignment that the lvalue is known to have.  It may
                   1128: have this alignment as a result of its data type, or because it is part of
                   1129: a structure and inherits alignment from that structure. For example, after
                   1130: this declaration:
                   1131: 
                   1132: @example
                   1133: struct foo @{ int x; char y; @} foo1;
                   1134: @end example
                   1135: 
                   1136: @noindent
                   1137: the value of @code{__alignof__ (foo1.y)} is probably 2 or 4, the same as
                   1138: @code{__alignof__ (int)}, even though the data type of @code{foo1.y}
                   1139: does not itself demand any alignment.@refill
                   1140: 
                   1141: @node Variable Attributes
                   1142: @section Specifying Attributes of Variables
                   1143: @cindex attribute of variables
                   1144: @cindex variable attributes
                   1145: 
                   1146: The keyword @code{__attribute__} allows you to specify special
                   1147: attributes of variables or structure fields.  The only attributes
                   1148: currently defined are the @code{aligned} and @code{format} attributes.
                   1149: 
                   1150: The @code{aligned} attribute specifies the alignment of the variable or
                   1151: structure field.  For example, the declaration:
                   1152: 
                   1153: @example
                   1154: int x __attribute__ ((aligned (16))) = 0;
                   1155: @end example
                   1156: 
                   1157: @noindent
                   1158: causes the compiler to allocate the global variable @code{x} on a
                   1159: 16-byte boundary.  On a 68000, this could be used in conjunction with
                   1160: an @code{asm} expression to access the @code{move16} instruction which
                   1161: requires 16-byte aligned operands.
                   1162: 
                   1163: You can also specify the alignment of structure fields.  For example, to
                   1164: create a double-word aligned @code{int} pair, you could write:
                   1165: 
                   1166: @example
                   1167: struct foo @{ int x[2] __attribute__ ((aligned (8))); @};
                   1168: @end example
                   1169: 
                   1170: @noindent
                   1171: This is an alternative to creating a union with a @code{double} member
                   1172: that forces the union to be double-word aligned.
                   1173: 
                   1174: It is not possible to specify the alignment of functions; the alignment
                   1175: of functions is determined by the machine's requirements and cannot be
                   1176: changed.
                   1177: 
                   1178: The @code{format} attribute specifies that a function takes @code{printf}
                   1179: or @code{scanf} style arguments which should be type-checked against a
                   1180: format string.  For example, the declaration:
                   1181: 
                   1182: @example
                   1183: extern int
                   1184: my_printf (void *my_object, const char *my_format, ...)
                   1185:       __attribute__ ((format (printf, 2, 3)));
                   1186: @end example
                   1187: 
                   1188: @noindent
                   1189: causes the compiler to check the arguments in calls to @code{my_printf}
                   1190: for consistency with the @code{printf} style format string argument
                   1191: @code{my_format}.
                   1192: 
                   1193: The first parameter of the @code{format} attribute determines how the
                   1194: format string is interpreted, and should be either @code{printf} or
                   1195: @code{scanf}.  The second parameter specifies the number of the
                   1196: format string argument (starting from 1).  The third parameter
                   1197: specifies the number of the first argument which should be
                   1198: checked against the format string.  For functions where the
                   1199: arguments are not available to be checked (such as @code{vprintf}),
                   1200: specify the third parameter as zero.  In this case the compiler only checks
                   1201: the format string for consistency.
                   1202: 
                   1203: In the example above, the format string (@code{my_format}) is the second
                   1204: argument to @code{my_print} and the arguments to check start with the third
                   1205: argument, so the correct parameters for the format attribute are 2 and 3.
                   1206: 
                   1207: The @code{format} attribute allows you to identify your own functions 
                   1208: which take format strings as arguments, so that GNU CC can check the
                   1209: calls to these functions for errors.  The compiler always
                   1210: checks formats for the ANSI library functions
                   1211: @code{printf}, @code{fprintf}, @code{sprintf},
                   1212: @code{scanf}, @code{fscanf}, @code{sscanf},
                   1213: @code{vprintf}, @code{vfprintf} and @code{vsprintf}
                   1214: whenever such warnings are requested (using @samp{-Wformat}), so there is no
                   1215: need to modify the header file @file{stdio.h}.
                   1216: 
                   1217: @node Inline
                   1218: @section An Inline Function is As Fast As a Macro
                   1219: @cindex inline functions
                   1220: @cindex integrating function code
                   1221: @cindex open coding
                   1222: @cindex macros, inline alternative
                   1223: 
                   1224: By declaring a function @code{inline}, you can direct GNU CC to integrate
                   1225: that function's code into the code for its callers.  This makes execution
                   1226: faster by eliminating the function-call overhead; in addition, if any of
                   1227: the actual argument values are constant, their known values may permit
                   1228: simplifications at compile time so that not all of the inline function's
                   1229: code needs to be included.
                   1230: 
                   1231: To declare a function inline, use the @code{inline} keyword in its
                   1232: declaration, like this:
                   1233: 
                   1234: @example
                   1235: inline int
                   1236: inc (int *a)
                   1237: @{
                   1238:   (*a)++;
                   1239: @}
                   1240: @end example
                   1241: 
                   1242: (If you are writing a header file to be included in ANSI C programs, write
                   1243: @code{__inline__} instead of @code{inline}.  @xref{Alternate Keywords}.)
                   1244: 
                   1245: You can also make all ``simple enough'' functions inline with the option
                   1246: @samp{-finline-functions}.  Note that certain usages in a function
                   1247: definition can make it unsuitable for inline substitution.
                   1248: 
                   1249: @cindex inline functions, omission of
                   1250: When a function is both inline and @code{static}, if all calls to the
                   1251: function are integrated into the caller, and the function's address is
                   1252: never used, then the function's own assembler code is never referenced.
                   1253: In this case, GNU CC does not actually output assembler code for the
                   1254: function, unless you specify the option @samp{-fkeep-inline-functions}.
                   1255: Some calls cannot be integrated for various reasons (in particular,
                   1256: calls that precede the function's definition cannot be integrated, and
                   1257: neither can recursive calls within the definition).  If there is a
                   1258: nonintegrated call, then the function is compiled to assembler code as
                   1259: usual.  The function must also be compiled as usual if the program
                   1260: refers to its address, because that can't be inlined.
                   1261: 
                   1262: @cindex non-static inline function
                   1263: When an inline function is not @code{static}, then the compiler must assume
                   1264: that there may be calls from other source files; since a global symbol can
                   1265: be defined only once in any program, the function must not be defined in
                   1266: the other source files, so the calls therein cannot be integrated.
                   1267: Therefore, a non-@code{static} inline function is always compiled on its
                   1268: own in the usual fashion.
                   1269: 
                   1270: If you specify both @code{inline} and @code{extern} in the function
                   1271: definition, then the definition is used only for inlining.  In no case
                   1272: is the function compiled on its own, not even if you refer to its
                   1273: address explicitly.  Such an address becomes an external reference, as
                   1274: if you had only declared the function, and had not defined it.
                   1275: 
                   1276: This combination of @code{inline} and @code{extern} has almost the
                   1277: effect of a macro.  The way to use it is to put a function definition in
                   1278: a header file with these keywords, and put another copy of the
                   1279: definition (lacking @code{inline} and @code{extern}) in a library file.
                   1280: The definition in the header file will cause most calls to the function
                   1281: to be inlined.  If any uses of the function remain, they will refer to
                   1282: the single copy in the library.
                   1283: 
                   1284: @node Extended Asm
                   1285: @section Assembler Instructions with C Expression Operands
                   1286: @cindex extended @code{asm}
                   1287: @cindex @code{asm} expressions
                   1288: @cindex assembler instructions
                   1289: @cindex registers
                   1290: 
                   1291: In an assembler instruction using @code{asm}, you can now specify the
                   1292: operands of the instruction using C expressions.  This means no more
                   1293: guessing which registers or memory locations will contain the data you want
                   1294: to use.
                   1295: 
                   1296: You must specify an assembler instruction template much like what appears
                   1297: in a machine description, plus an operand constraint string for each
                   1298: operand.
                   1299: 
                   1300: For example, here is how to use the 68881's @code{fsinx} instruction:
                   1301: 
                   1302: @example
                   1303: asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
                   1304: @end example
                   1305: 
                   1306: @noindent
                   1307: @ifset INTERNALS
                   1308: Here @code{angle} is the C expression for the input operand while
                   1309: @code{result} is that of the output operand.  Each has @samp{"f"} as its
                   1310: operand constraint, saying that a floating point register is required.  The
                   1311: @samp{=} in @samp{=f} indicates that the operand is an output; all output
                   1312: operands' constraints must use @samp{=}.  The constraints use the same
                   1313: language used in the machine description (@pxref{Constraints}).
                   1314: @end ifset
                   1315: @ifclear INTERNALS
                   1316: Here @code{angle} is the C expression for the input operand while
                   1317: @code{result} is that of the output operand.  Each has @samp{"f"} as its
                   1318: operand constraint, saying that a floating point register is required.  The
                   1319: @samp{=} in @samp{=f} indicates that the operand is an output; all output
                   1320: operands' constraints must use @samp{=}.  The constraints use the same
                   1321: language used in the machine description (@pxref{Constraints,,Operand
                   1322: Constraints, gcc.info, Using and Porting GCC}).
                   1323: @end ifclear
                   1324: 
                   1325: Each operand is described by an operand-constraint string followed by the C
                   1326: expression in parentheses.  A colon separates the assembler template from
                   1327: the first output operand, and another separates the last output operand
                   1328: from the first input, if any.  Commas separate output operands and separate
                   1329: inputs.  The total number of operands is limited to ten or to the maximum
                   1330: number of operands in any instruction pattern in the machine description,
                   1331: whichever is greater.
                   1332: 
                   1333: If there are no output operands, and there are input operands, then there
                   1334: must be two consecutive colons surrounding the place where the output
                   1335: operands would go.
                   1336: 
                   1337: Output operand expressions must be lvalues; the compiler can check this.
                   1338: The input operands need not be lvalues.  The compiler cannot check whether
                   1339: the operands have data types that are reasonable for the instruction being
                   1340: executed.  It does not parse the assembler instruction template and does
                   1341: not know what it means, or whether it is valid assembler input.  The
                   1342: extended @code{asm} feature is most often used for machine instructions
                   1343: that the compiler itself does not know exist.
                   1344: 
                   1345: The output operands must be write-only; GNU CC will assume that the values
                   1346: in these operands before the instruction are dead and need not be
                   1347: generated.  Extended asm does not support input-output or read-write
                   1348: operands.  For this reason, the constraint character @samp{+}, which
                   1349: indicates such an operand, may not be used.
                   1350: 
                   1351: When the assembler instruction has a read-write operand, or an operand
                   1352: in which only some of the bits are to be changed, you must logically
                   1353: split its function into two separate operands, one input operand and one
                   1354: write-only output operand.  The connection between them is expressed by
                   1355: constraints which say they need to be in the same location when the
                   1356: instruction executes.  You can use the same C expression for both
                   1357: operands, or different expressions.  For example, here we write the
                   1358: (fictitious) @samp{combine} instruction with @code{bar} as its read-only
                   1359: source operand and @code{foo} as its read-write destination:
                   1360: 
                   1361: @example
                   1362: asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
                   1363: @end example
                   1364: 
                   1365: @noindent
                   1366: The constraint @samp{"0"} for operand 1 says that it must occupy the same
                   1367: location as operand 0.  A digit in constraint is allowed only in an input
                   1368: operand, and it must refer to an output operand.
                   1369: 
                   1370: Only a digit in the constraint can guarantee that one operand will be in
                   1371: the same place as another.  The mere fact that @code{foo} is the value of
                   1372: both operands is not enough to guarantee that they will be in the same
                   1373: place in the generated assembler code.  The following would not work:
                   1374: 
                   1375: @example
                   1376: asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
                   1377: @end example
                   1378: 
                   1379: Various optimizations or reloading could cause operands 0 and 1 to be in
                   1380: different registers; GNU CC knows no reason not to do so.  For example, the
                   1381: compiler might find a copy of the value of @code{foo} in one register and
                   1382: use it for operand 1, but generate the output operand 0 in a different
                   1383: register (copying it afterward to @code{foo}'s own address).  Of course,
                   1384: since the register for operand 1 is not even mentioned in the assembler
                   1385: code, the result will not work, but GNU CC can't tell that.
                   1386: 
                   1387: Some instructions clobber specific hard registers.  To describe this, write
                   1388: a third colon after the input operands, followed by the names of the
                   1389: clobbered hard registers (given as strings).  Here is a realistic example
                   1390: for the Vax:
                   1391: 
                   1392: @example
                   1393: asm volatile ("movc3 %0,%1,%2"
                   1394:               : /* no outputs */
                   1395:               : "g" (from), "g" (to), "g" (count)
                   1396:               : "r0", "r1", "r2", "r3", "r4", "r5");
                   1397: @end example
                   1398: 
                   1399: If you refer to a particular hardware register from the assembler code,
                   1400: then you will probably have to list the register after the third colon
                   1401: to tell the compiler that the register's value is modified.  In many
                   1402: assemblers, the register names begin with @samp{%}; to produce one
                   1403: @samp{%} in the assembler code, you must write @samp{%%} in the input.
                   1404: 
                   1405: You can put multiple assembler instructions together in a single @code{asm}
                   1406: template, separated either with newlines (written as @samp{\n}) or with
                   1407: semicolons if the assembler allows such semicolons.  The GNU assembler
                   1408: allows semicolons and all Unix assemblers seem to do so.  The input
                   1409: operands are guaranteed not to use any of the clobbered registers, and
                   1410: neither will the output operands' addresses, so you can read and write the
                   1411: clobbered registers as many times as you like.  Here is an example of
                   1412: multiple instructions in a template; it assumes that the subroutine
                   1413: @code{_foo} accepts arguments in registers 9 and 10:
                   1414: 
                   1415: @example
                   1416: asm ("movl %0,r9;movl %1,r10;call _foo"
                   1417:      : /* no outputs */
                   1418:      : "g" (from), "g" (to)
                   1419:      : "r9", "r10");
                   1420: @end example
                   1421: 
                   1422: @ifset INTERNALS
                   1423: Unless an output operand has the @samp{&} constraint modifier, GNU CC may
                   1424: allocate it in the same register as an unrelated input operand, on the
                   1425: assumption that the inputs are consumed before the outputs are produced.
                   1426: This assumption may be false if the assembler code actually consists of
                   1427: more than one instruction.  In such a case, use @samp{&} for each output
                   1428: operand that may not overlap an input.
                   1429: @xref{Modifiers}.
                   1430: @end ifset
                   1431: @ifclear INTERNALS
                   1432: Unless an output operand has the @samp{&} constraint modifier, GNU CC may
                   1433: allocate it in the same register as an unrelated input operand, on the
                   1434: assumption that the inputs are consumed before the outputs are produced.
                   1435: This assumption may be false if the assembler code actually consists of
                   1436: more than one instruction.  In such a case, use @samp{&} for each output
                   1437: operand that may not overlap an input.
                   1438: @xref{Modifiers,,Constraint Modifier Characters,gcc.info,Using and
                   1439: Porting GCC}.
                   1440: @end ifclear
                   1441: 
                   1442: If you want to test the condition code produced by an assembler instruction,
                   1443: you must include a branch and a label in the @code{asm} construct, as follows:
                   1444: 
                   1445: @example
                   1446: asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:"
                   1447:      : "g" (result)
                   1448:      : "g" (input));
                   1449: @end example
                   1450: 
                   1451: @noindent
                   1452: This assumes your assembler supports local labels, as the GNU assembler
                   1453: and most Unix assemblers do.
                   1454: 
                   1455: @cindex macros containing @code{asm}
                   1456: Usually the most convenient way to use these @code{asm} instructions is to
                   1457: encapsulate them in macros that look like functions.  For example,
                   1458: 
                   1459: @example
                   1460: #define sin(x)       \
                   1461: (@{ double __value, __arg = (x);   \
                   1462:    asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
                   1463:    __value; @})
                   1464: @end example
                   1465: 
                   1466: @noindent
                   1467: Here the variable @code{__arg} is used to make sure that the instruction
                   1468: operates on a proper @code{double} value, and to accept only those
                   1469: arguments @code{x} which can convert automatically to a @code{double}.
                   1470: 
                   1471: Another way to make sure the instruction operates on the correct data type
                   1472: is to use a cast in the @code{asm}.  This is different from using a
                   1473: variable @code{__arg} in that it converts more different types.  For
                   1474: example, if the desired type were @code{int}, casting the argument to
                   1475: @code{int} would accept a pointer with no complaint, while assigning the
                   1476: argument to an @code{int} variable named @code{__arg} would warn about
                   1477: using a pointer unless the caller explicitly casts it.
                   1478: 
                   1479: If an @code{asm} has output operands, GNU CC assumes for optimization
                   1480: purposes that the instruction has no side effects except to change the
                   1481: output operands.  This does not mean that instructions with a side effect
                   1482: cannot be used, but you must be careful, because the compiler may eliminate
                   1483: them if the output operands aren't used, or move them out of loops, or
                   1484: replace two with one if they constitute a common subexpression.  Also, if
                   1485: your instruction does have a side effect on a variable that otherwise
                   1486: appears not to change, the old value of the variable may be reused later if
                   1487: it happens to be found in a register.
                   1488: 
                   1489: You can prevent an @code{asm} instruction from being deleted, moved
                   1490: significantly, or combined, by writing the keyword @code{volatile} after
                   1491: the @code{asm}.  For example:
                   1492: 
                   1493: @example
                   1494: #define set_priority(x)  \
                   1495: asm volatile ("set_priority %0": /* no outputs */ : "g" (x))
                   1496: @end example
                   1497: 
                   1498: @noindent
                   1499: An instruction without output operands will not be deleted or moved
                   1500: significantly, regardless, unless it is unreachable.
                   1501: 
                   1502: Note that even a volatile @code{asm} instruction can be moved in ways
                   1503: that appear insignificant to the compiler, such as across jump
                   1504: instructions.  You can't expect a sequence of volatile @code{asm}
                   1505: instructions to remain perfectly consecutive.  If you want consecutive
                   1506: output, use a single @code{asm}.
                   1507: 
                   1508: It is a natural idea to look for a way to give access to the condition
                   1509: code left by the assembler instruction.  However, when we attempted to
                   1510: implement this, we found no way to make it work reliably.  The problem
                   1511: is that output operands might need reloading, which would result in
                   1512: additional following ``store'' instructions.  On most machines, these
                   1513: instructions would alter the condition code before there was time to
                   1514: test it.  This problem doesn't arise for ordinary ``test'' and
                   1515: ``compare'' instructions because they don't have any output operands.
                   1516: 
                   1517: If you are writing a header file that should be includable in ANSI C
                   1518: programs, write @code{__asm__} instead of @code{asm}.  @xref{Alternate
                   1519: Keywords}.
                   1520: 
                   1521: @node Asm Labels
                   1522: @section Controlling Names Used in Assembler Code
                   1523: @cindex assembler names for identifiers
                   1524: @cindex names used in assembler code
                   1525: @cindex identifiers, names in assembler code
                   1526: 
                   1527: You can specify the name to be used in the assembler code for a C
                   1528: function or variable by writing the @code{asm} (or @code{__asm__})
                   1529: keyword after the declarator as follows:
                   1530: 
                   1531: @example
                   1532: int foo asm ("myfoo") = 2;
                   1533: @end example
                   1534: 
                   1535: @noindent
                   1536: This specifies that the name to be used for the variable @code{foo} in
                   1537: the assembler code should be @samp{myfoo} rather than the usual
                   1538: @samp{_foo}.
                   1539: 
                   1540: On systems where an underscore is normally prepended to the name of a C
                   1541: function or variable, this feature allows you to define names for the
                   1542: linker that do not start with an underscore.
                   1543: 
                   1544: You cannot use @code{asm} in this way in a function @emph{definition}; but
                   1545: you can get the same effect by writing a declaration for the function
                   1546: before its definition and putting @code{asm} there, like this:
                   1547: 
                   1548: @example
                   1549: extern func () asm ("FUNC");
                   1550: 
                   1551: func (x, y)
                   1552:      int x, y;
                   1553: @dots{}
                   1554: @end example
                   1555: 
                   1556: It is up to you to make sure that the assembler names you choose do not
                   1557: conflict with any other assembler symbols.  Also, you must not use a
                   1558: register name; that would produce completely invalid assembler code.  GNU
                   1559: CC does not as yet have the ability to store static variables in registers.
                   1560: Perhaps that will be added.
                   1561: 
                   1562: @node Explicit Reg Vars
                   1563: @section Variables in Specified Registers
                   1564: @cindex explicit register variables
                   1565: @cindex variables in specified registers
                   1566: @cindex specified registers
                   1567: @cindex registers, global allocation
                   1568: 
                   1569: GNU C allows you to put a few global variables into specified hardware
                   1570: registers.  You can also specify the register in which an ordinary
                   1571: register variable should be allocated.
                   1572: 
                   1573: @itemize @bullet
                   1574: @item
                   1575: Global register variables reserve registers throughout the program.
                   1576: This may be useful in programs such as programming language
                   1577: interpreters which have a couple of global variables that are accessed
                   1578: very often.
                   1579: 
                   1580: @item
                   1581: Local register variables in specific registers do not reserve the
                   1582: registers.  The compiler's data flow analysis is capable of determining
                   1583: where the specified registers contain live values, and where they are
                   1584: available for other uses.
                   1585: 
                   1586: These local variables are sometimes convenient for use with the extended
                   1587: @code{asm} feature (@pxref{Extended Asm}), if you want to write one
                   1588: output of the assembler instruction directly into a particular register.
                   1589: (This will work provided the register you specify fits the constraints
                   1590: specified for that operand in the @code{asm}.)
                   1591: @end itemize
                   1592: 
                   1593: @menu
                   1594: * Global Reg Vars::
                   1595: * Local Reg Vars::
                   1596: @end menu
                   1597: 
                   1598: @node Global Reg Vars
                   1599: @subsection Defining Global Register Variables
                   1600: @cindex global register variables
                   1601: @cindex registers, global variables in
                   1602: 
                   1603: You can define a global register variable in GNU C like this:
                   1604: 
                   1605: @example
                   1606: register int *foo asm ("a5");
                   1607: @end example
                   1608: 
                   1609: @noindent
                   1610: Here @code{a5} is the name of the register which should be used.  Choose a
                   1611: register which is normally saved and restored by function calls on your
                   1612: machine, so that library routines will not clobber it.
                   1613: 
                   1614: Naturally the register name is cpu-dependent, so you would need to
                   1615: conditionalize your program according to cpu type.  The register
                   1616: @code{a5} would be a good choice on a 68000 for a variable of pointer
                   1617: type.  On machines with register windows, be sure to choose a ``global''
                   1618: register that is not affected magically by the function call mechanism.
                   1619: 
                   1620: In addition, operating systems on one type of cpu may differ in how they
                   1621: name the registers; then you would need additional conditionals.  For
                   1622: example, some 68000 operating systems call this register @code{%a5}.
                   1623: 
                   1624: Eventually there may be a way of asking the compiler to choose a register
                   1625: automatically, but first we need to figure out how it should choose and
                   1626: how to enable you to guide the choice.  No solution is evident.
                   1627: 
                   1628: Defining a global register variable in a certain register reserves that
                   1629: register entirely for this use, at least within the current compilation.
                   1630: The register will not be allocated for any other purpose in the functions
                   1631: in the current compilation.  The register will not be saved and restored by
                   1632: these functions.  Stores into this register are never deleted even if they
                   1633: would appear to be dead, but references may be deleted or moved or
                   1634: simplified.
                   1635: 
                   1636: It is not safe to access the global register variables from signal
                   1637: handlers, or from more than one thread of control, because the system
                   1638: library routines may temporarily use the register for other things (unless
                   1639: you recompile them specially for the task at hand).
                   1640: 
                   1641: @cindex @code{qsort}, and global register variables
                   1642: It is not safe for one function that uses a global register variable to
                   1643: call another such function @code{foo} by way of a third function
                   1644: @code{lose} that was compiled without knowledge of this variable (i.e. in a
                   1645: different source file in which the variable wasn't declared).  This is
                   1646: because @code{lose} might save the register and put some other value there.
                   1647: For example, you can't expect a global register variable to be available in
                   1648: the comparison-function that you pass to @code{qsort}, since @code{qsort}
                   1649: might have put something else in that register.  (If you are prepared to
                   1650: recompile @code{qsort} with the same global register variable, you can
                   1651: solve this problem.)
                   1652: 
                   1653: If you want to recompile @code{qsort} or other source files which do not
                   1654: actually use your global register variable, so that they will not use that
                   1655: register for any other purpose, then it suffices to specify the compiler
                   1656: option @samp{-ffixed-@var{reg}}.  You need not actually add a global
                   1657: register declaration to their source code.
                   1658: 
                   1659: A function which can alter the value of a global register variable cannot
                   1660: safely be called from a function compiled without this variable, because it
                   1661: could clobber the value the caller expects to find there on return.
                   1662: Therefore, the function which is the entry point into the part of the
                   1663: program that uses the global register variable must explicitly save and
                   1664: restore the value which belongs to its caller.
                   1665: 
                   1666: @cindex register variable after @code{longjmp}
                   1667: @cindex global register after @code{longjmp}
                   1668: @cindex value after @code{longjmp}
                   1669: @findex longjmp
                   1670: @findex setjmp
                   1671: On most machines, @code{longjmp} will restore to each global register
                   1672: variable the value it had at the time of the @code{setjmp}.  On some
                   1673: machines, however, @code{longjmp} will not change the value of global
                   1674: register variables.  To be portable, the function that called @code{setjmp}
                   1675: should make other arrangements to save the values of the global register
                   1676: variables, and to restore them in a @code{longjmp}.  This way, the same
                   1677: thing will happen regardless of what @code{longjmp} does.
                   1678: 
                   1679: All global register variable declarations must precede all function
                   1680: definitions.  If such a declaration could appear after function
                   1681: definitions, the declaration would be too late to prevent the register from
                   1682: being used for other purposes in the preceding functions.
                   1683: 
                   1684: Global register variables may not have initial values, because an
                   1685: executable file has no means to supply initial contents for a register.
                   1686: 
                   1687: On the Sparc, there are reports that g3 @dots{} g7 are suitable
                   1688: registers, but certain library functions, such as @code{getwd}, as well
                   1689: as the subroutines for division and remainder, modify g3 and g4.  g1 and
                   1690: g2 are local temporaries.
                   1691: 
                   1692: On the 68000, a2 @dots{} a5 should be suitable, as should d2 @dots{} d7.
                   1693: Of course, it will not do to use more than a few of those.
                   1694: 
                   1695: @node Local Reg Vars
                   1696: @subsection Specifying Registers for Local Variables
                   1697: @cindex local variables, specifying registers 
                   1698: @cindex specifying registers for local variables
                   1699: @cindex registers for local variables
                   1700: 
                   1701: You can define a local register variable with a specified register
                   1702: like this:
                   1703: 
                   1704: @example
                   1705: register int *foo asm ("a5");
                   1706: @end example
                   1707: 
                   1708: @noindent
                   1709: Here @code{a5} is the name of the register which should be used.  Note
                   1710: that this is the same syntax used for defining global register
                   1711: variables, but for a local variable it would appear within a function.
                   1712: 
                   1713: Naturally the register name is cpu-dependent, but this is not a
                   1714: problem, since specific registers are most often useful with explicit
                   1715: assembler instructions (@pxref{Extended Asm}).  Both of these things
                   1716: generally require that you conditionalize your program according to
                   1717: cpu type.
                   1718: 
                   1719: In addition, operating systems on one type of cpu may differ in how they
                   1720: name the registers; then you would need additional conditionals.  For
                   1721: example, some 68000 operating systems call this register @code{%a5}.
                   1722: 
                   1723: Eventually there may be a way of asking the compiler to choose a register
                   1724: automatically, but first we need to figure out how it should choose and
                   1725: how to enable you to guide the choice.  No solution is evident.
                   1726: 
                   1727: Defining such a register variable does not reserve the register; it
                   1728: remains available for other uses in places where flow control determines
                   1729: the variable's value is not live.  However, these registers are made
                   1730: unavailable for use in the reload pass.  I would not be surprised if
                   1731: excessive use of this feature leaves the compiler too few available
                   1732: registers to compile certain functions.
                   1733: 
                   1734: @node Alternate Keywords
                   1735: @section Alternate Keywords
                   1736: @cindex alternate keywords
                   1737: @cindex keywords, alternate
                   1738: 
                   1739: The option @samp{-traditional} disables certain keywords; @samp{-ansi}
                   1740: disables certain others.  This causes trouble when you want to use GNU C
                   1741: extensions, or ANSI C features, in a general-purpose header file that
                   1742: should be usable by all programs, including ANSI C programs and traditional
                   1743: ones.  The keywords @code{asm}, @code{typeof} and @code{inline} cannot be
                   1744: used since they won't work in a program compiled with @samp{-ansi}, while
                   1745: the keywords @code{const}, @code{volatile}, @code{signed}, @code{typeof}
                   1746: and @code{inline} won't work in a program compiled with
                   1747: @samp{-traditional}.@refill
                   1748: 
                   1749: The way to solve these problems is to put @samp{__} at the beginning and
                   1750: end of each problematical keyword.  For example, use @code{__asm__}
                   1751: instead of @code{asm}, @code{__const__} instead of @code{const}, and
                   1752: @code{__inline__} instead of @code{inline}.
                   1753: 
                   1754: Other C compilers won't accept these alternative keywords; if you want to
                   1755: compile with another compiler, you can define the alternate keywords as
                   1756: macros to replace them with the customary keywords.  It looks like this:
                   1757: 
                   1758: @example
                   1759: #ifndef __GNUC__
                   1760: #define __asm__ asm
                   1761: #endif
                   1762: @end example
                   1763: 
                   1764: @samp{-pedantic} causes warnings for many GNU C extensions.  You can
                   1765: prevent such warnings within one expression by writing
                   1766: @code{__extension__} before the expression.  @code{__extension__} has no
                   1767: effect aside from this.
                   1768: 
                   1769: @node Incomplete Enums
                   1770: @section Incomplete @code{enum} Types
                   1771: 
                   1772: You can define an @code{enum} tag without specifying its possible values.
                   1773: This results in an incomplete type, much like what you get if you write
                   1774: @code{struct foo} without describing the elements.  A later declaration
                   1775: which does specify the possible values completes the type.
                   1776: 
                   1777: You can't allocate variables or storage using the type while it is
                   1778: incomplete.  However, you can work with pointers to that type.
                   1779: 
                   1780: This extension may not be very useful, but it makes the handling of
                   1781: @code{enum} more consistent with the way @code{struct} and @code{union}
                   1782: are handled.

unix.superglobalmegacorp.com

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