Annotation of GNUtools/cc/extend.texi, revision 1.1

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

unix.superglobalmegacorp.com

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