Annotation of GNUtools/cc/gcc.info-7, revision 1.1.1.1

1.1       root        1: This is Info file gcc.info, produced by Makeinfo-1.54 from the input
                      2: file gcc.texi.
                      3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
                      6:    Published by the Free Software Foundation 675 Massachusetts Avenue
                      7: Cambridge, MA 02139 USA
                      8: 
                      9:    Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc.
                     10: 
                     11:    Permission is granted to make and distribute verbatim copies of this
                     12: manual provided the copyright notice and this permission notice are
                     13: preserved on all copies.
                     14: 
                     15:    Permission is granted to copy and distribute modified versions of
                     16: this manual under the conditions for verbatim copying, provided also
                     17: that the sections entitled "GNU General Public License" and "Protect
                     18: Your Freedom--Fight `Look And Feel'" are included exactly as in the
                     19: original, and provided that the entire resulting derived work is
                     20: distributed under the terms of a permission notice identical to this
                     21: one.
                     22: 
                     23:    Permission is granted to copy and distribute translations of this
                     24: manual into another language, under the above conditions for modified
                     25: versions, except that the sections entitled "GNU General Public
                     26: License" and "Protect Your Freedom--Fight `Look And Feel'", and this
                     27: permission notice, may be included in translations approved by the Free
                     28: Software Foundation instead of in the original English.
                     29: 
                     30: 
                     31: File: gcc.info,  Node: Variable Length,  Next: Macro Varargs,  Prev: Zero Length,  Up: C Extensions
                     32: 
                     33: Arrays of Variable Length
                     34: =========================
                     35: 
                     36:    Variable-length automatic arrays are allowed in GNU C.  These arrays
                     37: are declared like any other automatic arrays, but with a length that is
                     38: not a constant expression.  The storage is allocated at the point of
                     39: declaration and deallocated when the brace-level is exited.  For
                     40: example:
                     41: 
                     42:      FILE *
                     43:      concat_fopen (char *s1, char *s2, char *mode)
                     44:      {
                     45:        char str[strlen (s1) + strlen (s2) + 1];
                     46:        strcpy (str, s1);
                     47:        strcat (str, s2);
                     48:        return fopen (str, mode);
                     49:      }
                     50: 
                     51:    Jumping or breaking out of the scope of the array name deallocates
                     52: the storage.  Jumping into the scope is not allowed; you get an error
                     53: message for it.
                     54: 
                     55:    You can use the function `alloca' to get an effect much like
                     56: variable-length arrays.  The function `alloca' is available in many
                     57: other C implementations (but not in all).  On the other hand,
                     58: variable-length arrays are more elegant.
                     59: 
                     60:    There are other differences between these two methods.  Space
                     61: allocated with `alloca' exists until the containing *function* returns.
                     62: The space for a variable-length array is deallocated as soon as the
                     63: array name's scope ends.  (If you use both variable-length arrays and
                     64: `alloca' in the same function, deallocation of a variable-length array
                     65: will also deallocate anything more recently allocated with `alloca'.)
                     66: 
                     67:    You can also use variable-length arrays as arguments to functions:
                     68: 
                     69:      struct entry
                     70:      tester (int len, char data[len][len])
                     71:      {
                     72:        ...
                     73:      }
                     74: 
                     75:    The length of an array is computed once when the storage is allocated
                     76: and is remembered for the scope of the array in case you access it with
                     77: `sizeof'.
                     78: 
                     79:    If you want to pass the array first and the length afterward, you can
                     80: use a forward declaration in the parameter list--another GNU extension.
                     81: 
                     82:      struct entry
                     83:      tester (int len; char data[len][len], int len)
                     84:      {
                     85:        ...
                     86:      }
                     87: 
                     88:    The `int len' before the semicolon is a "parameter forward
                     89: declaration", and it serves the purpose of making the name `len' known
                     90: when the declaration of `data' is parsed.
                     91: 
                     92:    You can write any number of such parameter forward declarations in
                     93: the parameter list.  They can be separated by commas or semicolons, but
                     94: the last one must end with a semicolon, which is followed by the "real"
                     95: parameter declarations.  Each forward declaration must match a "real"
                     96: declaration in parameter name and data type.
                     97: 
                     98: 
                     99: File: gcc.info,  Node: Macro Varargs,  Next: Subscripting,  Prev: Variable Length,  Up: C Extensions
                    100: 
                    101: Macros with Variable Numbers of Arguments
                    102: =========================================
                    103: 
                    104:    In GNU C, a macro can accept a variable number of arguments, much as
                    105: a function can.  The syntax for defining the macro looks much like that
                    106: used for a function.  Here is an example:
                    107: 
                    108:      #define eprintf(format, args...)  \
                    109:       fprintf (stderr, format , ## args)
                    110: 
                    111:    Here `args' is a "rest argument": it takes in zero or more
                    112: arguments, as many as the call contains.  All of them plus the commas
                    113: between them form the value of `args', which is substituted into the
                    114: macro body where `args' is used.  Thus, we have this expansion:
                    115: 
                    116:      eprintf ("%s:%d: ", input_file_name, line_number)
                    117:      ==>
                    118:      fprintf (stderr, "%s:%d: " , input_file_name, line_number)
                    119: 
                    120: Note that the comma after the string constant comes from the definition
                    121: of `eprintf', whereas the last comma comes from the value of `args'.
                    122: 
                    123:    The reason for using `##' is to handle the case when `args' matches
                    124: no arguments at all.  In this case, `args' has an empty value.  In this
                    125: case, the second comma in the definition becomes an embarrassment: if
                    126: it got through to the expansion of the macro, we would get something
                    127: like this:
                    128: 
                    129:      fprintf (stderr, "success!\n" , )
                    130: 
                    131: which is invalid C syntax.  `##' gets rid of the comma, so we get the
                    132: following instead:
                    133: 
                    134:      fprintf (stderr, "success!\n")
                    135: 
                    136:    This is a special feature of the GNU C preprocessor: `##' before a
                    137: rest argument that is empty discards the preceding sequence of
                    138: non-whitespace characters from the macro definition.  (If another macro
                    139: argument precedes, none of it is discarded.)
                    140: 
                    141:    It might be better to discard the last preprocessor token instead of
                    142: the last preceding sequence of non-whitespace characters; in fact, we
                    143: may someday change this feature to do so.  We advise you to write the
                    144: macro definition so that the preceding sequence of non-whitespace
                    145: characters is just a single token, so that the meaning will not change
                    146: if we change the definition of this feature.
                    147: 
                    148: 
                    149: File: gcc.info,  Node: Subscripting,  Next: Pointer Arith,  Prev: Macro Varargs,  Up: C Extensions
                    150: 
                    151: Non-Lvalue Arrays May Have Subscripts
                    152: =====================================
                    153: 
                    154:    Subscripting is allowed on arrays that are not lvalues, even though
                    155: the unary `&' operator is not.  For example, this is valid in GNU C
                    156: though not valid in other C dialects:
                    157: 
                    158:      struct foo {int a[4];};
                    159:      
                    160:      struct foo f();
                    161:      
                    162:      bar (int index)
                    163:      {
                    164:        return f().a[index];
                    165:      }
                    166: 
                    167: 
                    168: File: gcc.info,  Node: Pointer Arith,  Next: Initializers,  Prev: Subscripting,  Up: C Extensions
                    169: 
                    170: Arithmetic on `void'- and Function-Pointers
                    171: ===========================================
                    172: 
                    173:    In GNU C, addition and subtraction operations are supported on
                    174: pointers to `void' and on pointers to functions.  This is done by
                    175: treating the size of a `void' or of a function as 1.
                    176: 
                    177:    A consequence of this is that `sizeof' is also allowed on `void' and
                    178: on function types, and returns 1.
                    179: 
                    180:    The option `-Wpointer-arith' requests a warning if these extensions
                    181: are used.
                    182: 
                    183: 
                    184: File: gcc.info,  Node: Initializers,  Next: Constructors,  Prev: Pointer Arith,  Up: C Extensions
                    185: 
                    186: Non-Constant Initializers
                    187: =========================
                    188: 
                    189:    The elements of an aggregate initializer for an automatic variable
                    190: are not required to be constant expressions in GNU C.  Here is an
                    191: example of an initializer with run-time varying elements:
                    192: 
                    193:      foo (float f, float g)
                    194:      {
                    195:        float beat_freqs[2] = { f-g, f+g };
                    196:        ...
                    197:      }
                    198: 
                    199: 
                    200: File: gcc.info,  Node: Constructors,  Next: Labeled Elements,  Prev: Initializers,  Up: C Extensions
                    201: 
                    202: Constructor Expressions
                    203: =======================
                    204: 
                    205:    GNU C supports constructor expressions.  A constructor looks like a
                    206: cast containing an initializer.  Its value is an object of the type
                    207: specified in the cast, containing the elements specified in the
                    208: initializer.
                    209: 
                    210:    Usually, the specified type is a structure.  Assume that `struct
                    211: foo' and `structure' are declared as shown:
                    212: 
                    213:      struct foo {int a; char b[2];} structure;
                    214: 
                    215: Here is an example of constructing a `struct foo' with a constructor:
                    216: 
                    217:      structure = ((struct foo) {x + y, 'a', 0});
                    218: 
                    219: This is equivalent to writing the following:
                    220: 
                    221:      {
                    222:        struct foo temp = {x + y, 'a', 0};
                    223:        structure = temp;
                    224:      }
                    225: 
                    226:    You can also construct an array.  If all the elements of the
                    227: constructor are (made up of) simple constant expressions, suitable for
                    228: use in initializers, then the constructor is an lvalue and can be
                    229: coerced to a pointer to its first element, as shown here:
                    230: 
                    231:      char **foo = (char *[]) { "x", "y", "z" };
                    232: 
                    233:    Array constructors whose elements are not simple constants are not
                    234: very useful, because the constructor is not an lvalue.  There are only
                    235: two valid ways to use it: to subscript it, or initialize an array
                    236: variable with it.  The former is probably slower than a `switch'
                    237: statement, while the latter does the same thing an ordinary C
                    238: initializer would do.  Here is an example of subscripting an array
                    239: constructor:
                    240: 
                    241:      output = ((int[]) { 2, x, 28 }) [input];
                    242: 
                    243:    Constructor expressions for scalar types and union types are is also
                    244: allowed, but then the constructor expression is equivalent to a cast.
                    245: 
                    246: 
                    247: File: gcc.info,  Node: Labeled Elements,  Next: Cast to Union,  Prev: Constructors,  Up: C Extensions
                    248: 
                    249: Labeled Elements in Initializers
                    250: ================================
                    251: 
                    252:    Standard C requires the elements of an initializer to appear in a
                    253: fixed order, the same as the order of the elements in the array or
                    254: structure being initialized.
                    255: 
                    256:    In GNU C you can give the elements in any order, specifying the array
                    257: indices or structure field names they apply to.
                    258: 
                    259:    To specify an array index, write `[INDEX]' before the element value.
                    260: For example,
                    261: 
                    262:      int a[6] = { [4] 29, [2] 15 };
                    263: 
                    264: is equivalent to
                    265: 
                    266:      int a[6] = { 0, 0, 15, 0, 29, 0 };
                    267: 
                    268: The index values must be constant expressions, even if the array being
                    269: initialized is automatic.
                    270: 
                    271:    In a structure initializer, specify the name of a field to initialize
                    272: with `FIELDNAME:' before the element value.  For example, given the
                    273: following structure,
                    274: 
                    275:      struct point { int x, y; };
                    276: 
                    277: the following initialization
                    278: 
                    279:      struct point p = { y: yvalue, x: xvalue };
                    280: 
                    281: is equivalent to
                    282: 
                    283:      struct point p = { xvalue, yvalue };
                    284: 
                    285:    You can also use an element label when initializing a union, to
                    286: specify which element of the union should be used.  For example,
                    287: 
                    288:      union foo { int i; double d; };
                    289:      
                    290:      union foo f = { d: 4 };
                    291: 
                    292: will convert 4 to a `double' to store it in the union using the second
                    293: element.  By contrast, casting 4 to type `union foo' would store it
                    294: into the union as the integer `i', since it is an integer.  (*Note Cast
                    295: to Union::.)
                    296: 
                    297:    You can combine this technique of naming elements with ordinary C
                    298: initialization of successive elements.  Each initializer element that
                    299: does not have a label applies to the next consecutive element of the
                    300: array or structure.  For example,
                    301: 
                    302:      int a[6] = { [1] v1, v2, [4] v4 };
                    303: 
                    304: is equivalent to
                    305: 
                    306:      int a[6] = { 0, v1, v2, 0, v4, 0 };
                    307: 
                    308:    Labeling the elements of an array initializer is especially useful
                    309: when the indices are characters or belong to an `enum' type.  For
                    310: example:
                    311: 
                    312:      int whitespace[256]
                    313:        = { [' '] 1, ['\t'] 1, ['\h'] 1,
                    314:            ['\f'] 1, ['\n'] 1, ['\r'] 1 };
                    315: 
                    316: 
                    317: File: gcc.info,  Node: Case Ranges,  Next: Function Attributes,  Prev: Cast to Union,  Up: C Extensions
                    318: 
                    319: Case Ranges
                    320: ===========
                    321: 
                    322:    You can specify a range of consecutive values in a single `case'
                    323: label, like this:
                    324: 
                    325:      case LOW ... HIGH:
                    326: 
                    327: This has the same effect as the proper number of individual `case'
                    328: labels, one for each integer value from LOW to HIGH, inclusive.
                    329: 
                    330:    This feature is especially useful for ranges of ASCII character
                    331: codes:
                    332: 
                    333:      case 'A' ... 'Z':
                    334: 
                    335:    *Be careful:* Write spaces around the `...', for otherwise it may be
                    336: parsed wrong when you use it with integer values.  For example, write
                    337: this:
                    338: 
                    339:      case 1 ... 5:
                    340: 
                    341: rather than this:
                    342: 
                    343:      case 1...5:
                    344: 
                    345:      *Warning to C++ users:* When compiling C++, you must write two dots
                    346:      `..' rather than three to specify a range in case statements, thus:
                    347: 
                    348:           case 'A' .. 'Z':
                    349: 
                    350:      This is an anachronism in the GNU C++ front end, and will be
                    351:      rectified in a future release.
                    352: 
                    353: 
                    354: File: gcc.info,  Node: Cast to Union,  Next: Case Ranges,  Prev: Labeled Elements,  Up: C Extensions
                    355: 
                    356: Cast to a Union Type
                    357: ====================
                    358: 
                    359:    A cast to union type is similar to other casts, except that the type
                    360: specified is a union type.  You can specify the type either with `union
                    361: TAG' or with a typedef name.  A cast to union is actually a constructor
                    362: though, not a cast, and hence does not yield an lvalue like normal
                    363: casts.  (*Note Constructors::.)
                    364: 
                    365:    The types that may be cast to the union type are those of the members
                    366: of the union.  Thus, given the following union and variables:
                    367: 
                    368:      union foo { int i; double d; };
                    369:      int x;
                    370:      double y;
                    371: 
                    372: both `x' and `y' can be cast to type `union' foo.
                    373: 
                    374:    Using the cast as the right-hand side of an assignment to a variable
                    375: of union type is equivalent to storing in a member of the union:
                    376: 
                    377:      union foo u;
                    378:      ...
                    379:      u = (union foo) x  ==  u.i = x
                    380:      u = (union foo) y  ==  u.d = y
                    381: 
                    382:    You can also use the union cast as a function argument:
                    383: 
                    384:      void hack (union foo);
                    385:      ...
                    386:      hack ((union foo) x);
                    387: 
                    388: 
                    389: File: gcc.info,  Node: Function Attributes,  Next: Function Prototypes,  Prev: Case Ranges,  Up: C Extensions
                    390: 
                    391: Declaring Attributes of Functions
                    392: =================================
                    393: 
                    394:    In GNU C, you declare certain things about functions called in your
                    395: program which help the compiler optimize function calls.
                    396: 
                    397:    A few standard library functions, such as `abort' and `exit', cannot
                    398: return.  GNU CC knows this automatically.  Some programs define their
                    399: own functions that never return.  You can declare them `volatile' to
                    400: tell the compiler this fact.  For example,
                    401: 
                    402:      typedef void voidfn ();
                    403:      
                    404:      volatile voidfn fatal;
                    405:      
                    406:      void
                    407:      fatal (...)
                    408:      {
                    409:        ... /* Print error message. */ ...
                    410:        exit (1);
                    411:      }
                    412: 
                    413:    The `volatile' keyword tells the compiler to assume that `fatal'
                    414: cannot return.  It can then optimize without regard to what would
                    415: happen if `fatal' ever did return.  This makes slightly better code.
                    416: More importantly, it helps avoid spurious warnings of uninitialized
                    417: variables.
                    418: 
                    419:    Do not assume that registers saved by the calling function are
                    420: restored before calling the `volatile' function.
                    421: 
                    422:    It does not make sense for a `volatile' function to have a return
                    423: type other than `void'.
                    424: 
                    425:    Many functions do not examine any values except their arguments, and
                    426: have no effects except the return value.  Such a function can be subject
                    427: to common subexpression elimination and loop optimization just as an
                    428: arithmetic operator would be.  These functions should be declared
                    429: `const'.  For example,
                    430: 
                    431:      typedef int intfn ();
                    432:      
                    433:      extern const intfn square;
                    434: 
                    435: says that the hypothetical function `square' is safe to call fewer
                    436: times than the program says.
                    437: 
                    438:    Note that a function that has pointer arguments and examines the data
                    439: pointed to must *not* be declared `const'.  Likewise, a function that
                    440: calls a non-`const' function usually must not be `const'.  It does not
                    441: make sense for a `const' function to return `void'.
                    442: 
                    443:    The examples above use `typedef' because that is the only way to
                    444: declare a function `const' or `volatile'.  A declaration like this:
                    445: 
                    446:      extern const int square ();
                    447: 
                    448: does not have this effect; it says that the return type of `square' is
                    449: `const', not `square' itself.
                    450: 
                    451:    Some people object to this feature, suggesting that ANSI C's
                    452: `#pragma' should be used instead.  There are two reasons for not doing
                    453: this.
                    454: 
                    455:   1. It is impossible to generate `#pragma' commands from a macro.
                    456: 
                    457:   2. There is no telling what the same `#pragma' might mean in another
                    458:      compiler.
                    459: 
                    460:    These two reasons apply to almost any application that might be
                    461: proposed for `#pragma'.  It is basically a mistake to use `#pragma' for
                    462: *anything*.
                    463: 
                    464:    The keyword `__attribute__' allows you to specify special attributes
                    465: when making a declaration.  This keyword is followed by an attribute
                    466: specification inside double parentheses.  One attribute, `format', is
                    467: currently defined for functions.  Others are implemented for variables
                    468: and structure fields (*note Variable Attributes::.).
                    469: 
                    470: `format (ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)'
                    471:      The `format' attribute specifies that a function takes `printf' or
                    472:      `scanf' style arguments which should be type-checked against a
                    473:      format string.  For example, the declaration:
                    474: 
                    475:           extern int
                    476:           my_printf (void *my_object, const char *my_format, ...)
                    477:                 __attribute__ ((format (printf, 2, 3)));
                    478: 
                    479:      causes the compiler to check the arguments in calls to `my_printf'
                    480:      for consistency with the `printf' style format string argument
                    481:      `my_format'.
                    482: 
                    483:      The parameter ARCHETYPE determines how the format string is
                    484:      interpreted, and should be either `printf' or `scanf'.  The
                    485:      parameter STRING-INDEX specifies which argument is the format
                    486:      string argument (starting from 1), while FIRST-TO-CHECK is the
                    487:      number of the first argument to check against the format string.
                    488:      For functions where the arguments are not available to be checked
                    489:      (such as `vprintf'), specify the third parameter as zero.  In this
                    490:      case the compiler only checks the format string for consistency.
                    491: 
                    492:      In the example above, the format string (`my_format') is the second
                    493:      argument of the function `my_print', and the arguments to check
                    494:      start with the third argument, so the correct parameters for the
                    495:      format attribute are 2 and 3.
                    496: 
                    497:      The `format' attribute allows you to identify your own functions
                    498:      which take format strings as arguments, so that GNU CC can check
                    499:      the calls to these functions for errors.  The compiler always
                    500:      checks formats for the ANSI library functions `printf', `fprintf',
                    501:      `sprintf', `scanf', `fscanf', `sscanf', `vprintf', `vfprintf' and
                    502:      `vsprintf' whenever such warnings are requested (using
                    503:      `-Wformat'), so there is no need to modify the header file
                    504:      `stdio.h'.
                    505: 
                    506: 
                    507: File: gcc.info,  Node: Function Prototypes,  Next: Dollar Signs,  Prev: Function Attributes,  Up: C Extensions
                    508: 
                    509: Prototypes and Old-Style Function Definitions
                    510: =============================================
                    511: 
                    512:    GNU C extends ANSI C to allow a function prototype to override a
                    513: later old-style non-prototype definition.  Consider the following
                    514: example:
                    515: 
                    516:      /* Use prototypes unless the compiler is old-fashioned.  */
                    517:      #if __STDC__
                    518:      #define P(x) x
                    519:      #else
                    520:      #define P(x) ()
                    521:      #endif
                    522:      
                    523:      /* Prototype function declaration.  */
                    524:      int isroot P((uid_t));
                    525:      
                    526:      /* Old-style function definition.  */
                    527:      int
                    528:      isroot (x)   /* ??? lossage here ??? */
                    529:           uid_t x;
                    530:      {
                    531:        return x == 0;
                    532:      }
                    533: 
                    534:    Suppose the type `uid_t' happens to be `short'.  ANSI C does not
                    535: allow this example, because subword arguments in old-style
                    536: non-prototype definitions are promoted.  Therefore in this example the
                    537: function definition's argument is really an `int', which does not match
                    538: the prototype argument type of `short'.
                    539: 
                    540:    This restriction of ANSI C makes it hard to write code that is
                    541: portable to traditional C compilers, because the programmer does not
                    542: know whether the `uid_t' type is `short', `int', or `long'.  Therefore,
                    543: in cases like these GNU C allows a prototype to override a later
                    544: old-style definition.  More precisely, in GNU C, a function prototype
                    545: argument type overrides the argument type specified by a later
                    546: old-style definition if the former type is the same as the latter type
                    547: before promotion.  Thus in GNU C the above example is equivalent to the
                    548: following:
                    549: 
                    550:      int isroot (uid_t);
                    551:      
                    552:      int
                    553:      isroot (uid_t x)
                    554:      {
                    555:        return x == 0;
                    556:      }
                    557: 
                    558: 
                    559: File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: Function Prototypes,  Up: C Extensions
                    560: 
                    561: Dollar Signs in Identifier Names
                    562: ================================
                    563: 
                    564:    In GNU C, you may use dollar signs in identifier names.  This is
                    565: because many traditional C implementations allow such identifiers.
                    566: 
                    567:    On some machines, dollar signs are allowed in identifiers if you
                    568: specify `-traditional'.  On a few systems they are allowed by default,
                    569: even if you do not use `-traditional'.  But they are never allowed if
                    570: you specify `-ansi'.
                    571: 
                    572:    There are certain ANSI C programs (obscure, to be sure) that would
                    573: compile incorrectly if dollar signs were permitted in identifiers.  For
                    574: example:
                    575: 
                    576:      #define foo(a) #a
                    577:      #define lose(b) foo (b)
                    578:      #define test$
                    579:      lose (test)
                    580: 
                    581: 
                    582: File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: C Extensions
                    583: 
                    584: The Character ESC in Constants
                    585: ==============================
                    586: 
                    587:    You can use the sequence `\e' in a string or character constant to
                    588: stand for the ASCII character ESC.
                    589: 
                    590: 
                    591: File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Variable Attributes,  Up: C Extensions
                    592: 
                    593: Inquiring on Alignment of Types or Variables
                    594: ============================================
                    595: 
                    596:    The keyword `__alignof__' allows you to inquire about how an object
                    597: is aligned, or the minimum alignment usually required by a type.  Its
                    598: syntax is just like `sizeof'.
                    599: 
                    600:    For example, if the target machine requires a `double' value to be
                    601: aligned on an 8-byte boundary, then `__alignof__ (double)' is 8.  This
                    602: is true on many RISC machines.  On more traditional machine designs,
                    603: `__alignof__ (double)' is 4 or even 2.
                    604: 
                    605:    Some machines never actually require alignment; they allow reference
                    606: to any data type even at an odd addresses.  For these machines,
                    607: `__alignof__' reports the *recommended* alignment of a type.
                    608: 
                    609:    When the operand of `__alignof__' is an lvalue rather than a type,
                    610: the value is the largest alignment that the lvalue is known to have.
                    611: It may have this alignment as a result of its data type, or because it
                    612: is part of a structure and inherits alignment from that structure.  For
                    613: example, after this declaration:
                    614: 
                    615:      struct foo { int x; char y; } foo1;
                    616: 
                    617: the value of `__alignof__ (foo1.y)' is probably 2 or 4, the same as
                    618: `__alignof__ (int)', even though the data type of `foo1.y' does not
                    619: itself demand any alignment.
                    620: 
                    621:    A related feature which lets you specify the alignment of an object
                    622: is `__attribute__ ((aligned (ALIGNMENT)))'; see the following section.
                    623: 
                    624: 
                    625: File: gcc.info,  Node: Variable Attributes,  Next: Alignment,  Prev: Character Escapes,  Up: C Extensions
                    626: 
                    627: Specifying Attributes of Variables
                    628: ==================================
                    629: 
                    630:    The keyword `__attribute__' allows you to specify special attributes
                    631: of variables or structure fields.  This keyword is followed by an
                    632: attribute specification inside double parentheses.  Four attributes are
                    633: currently defined: `aligned', `format', `mode' and `packed'.  `format'
                    634: is used for functions, and thus not documented here; see *Note Function
                    635: Attributes::.
                    636: 
                    637: `aligned (ALIGNMENT)'
                    638:      This attribute specifies a minimum alignment for the variable or
                    639:      structure field, measured in bytes.  For example, the declaration:
                    640: 
                    641:           int x __attribute__ ((aligned (16))) = 0;
                    642: 
                    643:      causes the compiler to allocate the global variable `x' on a
                    644:      16-byte boundary.  On a 68040, this could be used in conjunction
                    645:      with an `asm' expression to access the `move16' instruction which
                    646:      requires 16-byte aligned operands.
                    647: 
                    648:      You can also specify the alignment of structure fields.  For
                    649:      example, to create a double-word aligned `int' pair, you could
                    650:      write:
                    651: 
                    652:           struct foo { int x[2] __attribute__ ((aligned (8))); };
                    653: 
                    654:      This is an alternative to creating a union with a `double' member
                    655:      that forces the union to be double-word aligned.
                    656: 
                    657:      It is not possible to specify the alignment of functions; the
                    658:      alignment of functions is determined by the machine's requirements
                    659:      and cannot be changed.  You cannot specify alignment for a typedef
                    660:      name because such a name is just an alias, not a distinct type.
                    661: 
                    662:      The `aligned' attribute can only increase the alignment; but you
                    663:      can decrease it by specifying `packed' as well.  See below.
                    664: 
                    665:      The linker of your operating system imposes a maximum alignment.
                    666:      If the linker aligns each object file on a four byte boundary,
                    667:      then it is beyond the compiler's power to cause anything to be
                    668:      aligned to a larger boundary than that.  For example, if  the
                    669:      linker happens to put this object file at address 136 (eight more
                    670:      than a multiple of 64), then the compiler cannot guarantee an
                    671:      alignment of more than 8 just by aligning variables in the object
                    672:      file.
                    673: 
                    674: `mode (MODE)'
                    675:      This attribute specifies the data type for the
                    676:      declaration--whichever type corresponds to the mode MODE.  This in
                    677:      effect lets you request an integer or floating point type
                    678:      according to its width.
                    679: 
                    680: `packed'
                    681:      The `packed' attribute specifies that a variable or structure field
                    682:      should have the smallest possible alignment--one byte for a
                    683:      variable, and one bit for a field, unless you specify a larger
                    684:      value with the `aligned' attribute.
                    685: 
                    686:    To specify multiple attributes, separate them by commas within the
                    687: double parentheses: for example, `__attribute__ ((aligned (16),
                    688: packed))'.
                    689: 
                    690: 
                    691: File: gcc.info,  Node: Inline,  Next: Extended Asm,  Prev: Alignment,  Up: C Extensions
                    692: 
                    693: An Inline Function is As Fast As a Macro
                    694: ========================================
                    695: 
                    696:    By declaring a function `inline', you can direct GNU CC to integrate
                    697: that function's code into the code for its callers.  This makes
                    698: execution faster by eliminating the function-call overhead; in
                    699: addition, if any of the actual argument values are constant, their known
                    700: values may permit simplifications at compile time so that not all of the
                    701: inline function's code needs to be included.  The effect on code size is
                    702: less predictable; object code may be larger or smaller with function
                    703: inlining, depending on the particular case.  Inlining of functions is an
                    704: optimization and it really "works" only in optimizing compilation.  If
                    705: you don't use `-O', no function is really inline.
                    706: 
                    707:    To declare a function inline, use the `inline' keyword in its
                    708: declaration, like this:
                    709: 
                    710:      inline int
                    711:      inc (int *a)
                    712:      {
                    713:        (*a)++;
                    714:      }
                    715: 
                    716:    (If you are writing a header file to be included in ANSI C programs,
                    717: write `__inline__' instead of `inline'.  *Note Alternate Keywords::.)
                    718: 
                    719:    You can also make all "simple enough" functions inline with the
                    720: option `-finline-functions'.  Note that certain usages in a function
                    721: definition can make it unsuitable for inline substitution.
                    722: 
                    723:    For C++ programs, GNU CC automatically inlines member functions even
                    724: if they are not explicitly declared `inline'.  (You can override this
                    725: with `-fno-default-inline'; *note Options Controlling C++ Dialect: C++
                    726: Dialect Options..)
                    727: 
                    728:    When a function is both inline and `static', if all calls to the
                    729: function are integrated into the caller, and the function's address is
                    730: never used, then the function's own assembler code is never referenced.
                    731: In this case, GNU CC does not actually output assembler code for the
                    732: function, unless you specify the option `-fkeep-inline-functions'.
                    733: Some calls cannot be integrated for various reasons (in particular,
                    734: calls that precede the function's definition cannot be integrated, and
                    735: neither can recursive calls within the definition).  If there is a
                    736: nonintegrated call, then the function is compiled to assembler code as
                    737: usual.  The function must also be compiled as usual if the program
                    738: refers to its address, because that can't be inlined.
                    739: 
                    740:    When an inline function is not `static', then the compiler must
                    741: assume that there may be calls from other source files; since a global
                    742: symbol can be defined only once in any program, the function must not
                    743: be defined in the other source files, so the calls therein cannot be
                    744: integrated.  Therefore, a non-`static' inline function is always
                    745: compiled on its own in the usual fashion.
                    746: 
                    747:    If you specify both `inline' and `extern' in the function
                    748: definition, then the definition is used only for inlining.  In no case
                    749: is the function compiled on its own, not even if you refer to its
                    750: address explicitly.  Such an address becomes an external reference, as
                    751: if you had only declared the function, and had not defined it.
                    752: 
                    753:    This combination of `inline' and `extern' has almost the effect of a
                    754: macro.  The way to use it is to put a function definition in a header
                    755: file with these keywords, and put another copy of the definition
                    756: (lacking `inline' and `extern') in a library file.  The definition in
                    757: the header file will cause most calls to the function to be inlined.
                    758: If any uses of the function remain, they will refer to the single copy
                    759: in the library.
                    760: 
                    761:    GNU C does not inline any functions when not optimizing.  It is not
                    762: clear whether it is better to inline or not, in this case, but we found
                    763: that a correct implementation when not optimizing was difficult.  So we
                    764: did the easy thing, and turned it off.
                    765: 
                    766: 
                    767: File: gcc.info,  Node: Extended Asm,  Next: Asm Labels,  Prev: Inline,  Up: C Extensions
                    768: 
                    769: Assembler Instructions with C Expression Operands
                    770: =================================================
                    771: 
                    772:    In an assembler instruction using `asm', you can now specify the
                    773: operands of the instruction using C expressions.  This means no more
                    774: guessing which registers or memory locations will contain the data you
                    775: want to use.
                    776: 
                    777:    You must specify an assembler instruction template much like what
                    778: appears in a machine description, plus an operand constraint string for
                    779: each operand.
                    780: 
                    781:    For example, here is how to use the 68881's `fsinx' instruction:
                    782: 
                    783:      asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
                    784: 
                    785: Here `angle' is the C expression for the input operand while `result'
                    786: is that of the output operand.  Each has `"f"' as its operand
                    787: constraint, saying that a floating point register is required.  The `='
                    788: in `=f' indicates that the operand is an output; all output operands'
                    789: constraints must use `='.  The constraints use the same language used
                    790: in the machine description (*note Constraints::.).
                    791: 
                    792:    Each operand is described by an operand-constraint string followed
                    793: by the C expression in parentheses.  A colon separates the assembler
                    794: template from the first output operand, and another separates the last
                    795: output operand from the first input, if any.  Commas separate output
                    796: operands and separate inputs.  The total number of operands is limited
                    797: to ten or to the maximum number of operands in any instruction pattern
                    798: in the machine description, whichever is greater.
                    799: 
                    800:    If there are no output operands, and there are input operands, then
                    801: there must be two consecutive colons surrounding the place where the
                    802: output operands would go.
                    803: 
                    804:    Output operand expressions must be lvalues; the compiler can check
                    805: this.  The input operands need not be lvalues.  The compiler cannot
                    806: check whether the operands have data types that are reasonable for the
                    807: instruction being executed.  It does not parse the assembler
                    808: instruction template and does not know what it means, or whether it is
                    809: valid assembler input.  The extended `asm' feature is most often used
                    810: for machine instructions that the compiler itself does not know exist.
                    811: 
                    812:    The output operands must be write-only; GNU CC will assume that the
                    813: values in these operands before the instruction are dead and need not be
                    814: generated.  Extended asm does not support input-output or read-write
                    815: operands.  For this reason, the constraint character `+', which
                    816: indicates such an operand, may not be used.
                    817: 
                    818:    When the assembler instruction has a read-write operand, or an
                    819: operand in which only some of the bits are to be changed, you must
                    820: logically split its function into two separate operands, one input
                    821: operand and one write-only output operand.  The connection between them
                    822: is expressed by constraints which say they need to be in the same
                    823: location when the instruction executes.  You can use the same C
                    824: expression for both operands, or different expressions.  For example,
                    825: here we write the (fictitious) `combine' instruction with `bar' as its
                    826: read-only source operand and `foo' as its read-write destination:
                    827: 
                    828:      asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
                    829: 
                    830: The constraint `"0"' for operand 1 says that it must occupy the same
                    831: location as operand 0.  A digit in constraint is allowed only in an
                    832: input operand, and it must refer to an output operand.
                    833: 
                    834:    Only a digit in the constraint can guarantee that one operand will
                    835: be in the same place as another.  The mere fact that `foo' is the value
                    836: of both operands is not enough to guarantee that they will be in the
                    837: same place in the generated assembler code.  The following would not
                    838: work:
                    839: 
                    840:      asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
                    841: 
                    842:    Various optimizations or reloading could cause operands 0 and 1 to
                    843: be in different registers; GNU CC knows no reason not to do so.  For
                    844: example, the compiler might find a copy of the value of `foo' in one
                    845: register and use it for operand 1, but generate the output operand 0 in
                    846: a different register (copying it afterward to `foo''s own address).  Of
                    847: course, since the register for operand 1 is not even mentioned in the
                    848: assembler code, the result will not work, but GNU CC can't tell that.
                    849: 
                    850:    Some instructions clobber specific hard registers.  To describe
                    851: this, write a third colon after the input operands, followed by the
                    852: names of the clobbered hard registers (given as strings).  Here is a
                    853: realistic example for the Vax:
                    854: 
                    855:      asm volatile ("movc3 %0,%1,%2"
                    856:                    : /* no outputs */
                    857:                    : "g" (from), "g" (to), "g" (count)
                    858:                    : "r0", "r1", "r2", "r3", "r4", "r5");
                    859: 
                    860:    If you refer to a particular hardware register from the assembler
                    861: code, then you will probably have to list the register after the third
                    862: colon to tell the compiler that the register's value is modified.  In
                    863: many assemblers, the register names begin with `%'; to produce one `%'
                    864: in the assembler code, you must write `%%' in the input.
                    865: 
                    866:    If your assembler instruction can alter the condition code register,
                    867: add `cc' to the list of clobbered registers.  GNU CC on some machines
                    868: represents the condition codes as a specific hardware register; `cc'
                    869: serves to name this register.  On other machines, the condition code is
                    870: handled differently, and specifying `cc' has no effect.  But it is
                    871: valid no matter what the machine.
                    872: 
                    873:    If your assembler instruction modifies memory in an unpredictable
                    874: fashion, add `memory' to the list of clobbered registers.  This will
                    875: cause GNU CC to not keep memory values cached in registers across the
                    876: assembler instruction.
                    877: 
                    878:    You can put multiple assembler instructions together in a single
                    879: `asm' template, separated either with newlines (written as `\n') or with
                    880: semicolons if the assembler allows such semicolons.  The GNU assembler
                    881: allows semicolons and all Unix assemblers seem to do so.  The input
                    882: operands are guaranteed not to use any of the clobbered registers, and
                    883: neither will the output operands' addresses, so you can read and write
                    884: the clobbered registers as many times as you like.  Here is an example
                    885: of multiple instructions in a template; it assumes that the subroutine
                    886: `_foo' accepts arguments in registers 9 and 10:
                    887: 
                    888:      asm ("movl %0,r9;movl %1,r10;call _foo"
                    889:           : /* no outputs */
                    890:           : "g" (from), "g" (to)
                    891:           : "r9", "r10");
                    892: 
                    893:    Unless an output operand has the `&' constraint modifier, GNU CC may
                    894: allocate it in the same register as an unrelated input operand, on the
                    895: assumption that the inputs are consumed before the outputs are produced.
                    896: This assumption may be false if the assembler code actually consists of
                    897: more than one instruction.  In such a case, use `&' for each output
                    898: operand that may not overlap an input.  *Note Modifiers::.
                    899: 
                    900:    If you want to test the condition code produced by an assembler
                    901: instruction, you must include a branch and a label in the `asm'
                    902: construct, as follows:
                    903: 
                    904:      asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:"
                    905:           : "g" (result)
                    906:           : "g" (input));
                    907: 
                    908: This assumes your assembler supports local labels, as the GNU assembler
                    909: and most Unix assemblers do.
                    910: 
                    911:    Speaking of labels, jumps from one `asm' to another are not
                    912: supported.  The compiler's optimizers do not know about these jumps,
                    913: and therefore they cannot take account of them when deciding how to
                    914: optimize.
                    915: 
                    916:    Usually the most convenient way to use these `asm' instructions is to
                    917: encapsulate them in macros that look like functions.  For example,
                    918: 
                    919:      #define sin(x)       \
                    920:      ({ double __value, __arg = (x);   \
                    921:         asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
                    922:         __value; })
                    923: 
                    924: Here the variable `__arg' is used to make sure that the instruction
                    925: operates on a proper `double' value, and to accept only those arguments
                    926: `x' which can convert automatically to a `double'.
                    927: 
                    928:    Another way to make sure the instruction operates on the correct
                    929: data type is to use a cast in the `asm'.  This is different from using a
                    930: variable `__arg' in that it converts more different types.  For
                    931: example, if the desired type were `int', casting the argument to `int'
                    932: would accept a pointer with no complaint, while assigning the argument
                    933: to an `int' variable named `__arg' would warn about using a pointer
                    934: unless the caller explicitly casts it.
                    935: 
                    936:    If an `asm' has output operands, GNU CC assumes for optimization
                    937: purposes that the instruction has no side effects except to change the
                    938: output operands.  This does not mean that instructions with a side
                    939: effect cannot be used, but you must be careful, because the compiler
                    940: may eliminate them if the output operands aren't used, or move them out
                    941: of loops, or replace two with one if they constitute a common
                    942: subexpression.  Also, if your instruction does have a side effect on a
                    943: variable that otherwise appears not to change, the old value of the
                    944: variable may be reused later if it happens to be found in a register.
                    945: 
                    946:    You can prevent an `asm' instruction from being deleted, moved
                    947: significantly, or combined, by writing the keyword `volatile' after the
                    948: `asm'.  For example:
                    949: 
                    950:      #define set_priority(x)  \
                    951:      asm volatile ("set_priority %0": /* no outputs */ : "g" (x))
                    952: 
                    953: An instruction without output operands will not be deleted or moved
                    954: significantly, regardless, unless it is unreachable.
                    955: 
                    956:    Note that even a volatile `asm' instruction can be moved in ways
                    957: that appear insignificant to the compiler, such as across jump
                    958: instructions.  You can't expect a sequence of volatile `asm'
                    959: instructions to remain perfectly consecutive.  If you want consecutive
                    960: output, use a single `asm'.
                    961: 
                    962:    It is a natural idea to look for a way to give access to the
                    963: condition code left by the assembler instruction.  However, when we
                    964: attempted to implement this, we found no way to make it work reliably.
                    965: The problem is that output operands might need reloading, which would
                    966: result in additional following "store" instructions.  On most machines,
                    967: these instructions would alter the condition code before there was time
                    968: to test it.  This problem doesn't arise for ordinary "test" and
                    969: "compare" instructions because they don't have any output operands.
                    970: 
                    971:    If you are writing a header file that should be includable in ANSI C
                    972: programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
                    973: 
                    974: 
                    975: File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Extended Asm,  Up: C Extensions
                    976: 
                    977: Controlling Names Used in Assembler Code
                    978: ========================================
                    979: 
                    980:    You can specify the name to be used in the assembler code for a C
                    981: function or variable by writing the `asm' (or `__asm__') keyword after
                    982: the declarator as follows:
                    983: 
                    984:      int foo asm ("myfoo") = 2;
                    985: 
                    986: This specifies that the name to be used for the variable `foo' in the
                    987: assembler code should be `myfoo' rather than the usual `_foo'.
                    988: 
                    989:    On systems where an underscore is normally prepended to the name of
                    990: a C function or variable, this feature allows you to define names for
                    991: the linker that do not start with an underscore.
                    992: 
                    993:    You cannot use `asm' in this way in a function *definition*; but you
                    994: can get the same effect by writing a declaration for the function
                    995: before its definition and putting `asm' there, like this:
                    996: 
                    997:      extern func () asm ("FUNC");
                    998:      
                    999:      func (x, y)
                   1000:           int x, y;
                   1001:      ...
                   1002: 
                   1003:    It is up to you to make sure that the assembler names you choose do
                   1004: not conflict with any other assembler symbols.  Also, you must not use a
                   1005: register name; that would produce completely invalid assembler code.
                   1006: GNU CC does not as yet have the ability to store static variables in
                   1007: registers.  Perhaps that will be added.
                   1008: 
                   1009: 
                   1010: File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
                   1011: 
                   1012: Variables in Specified Registers
                   1013: ================================
                   1014: 
                   1015:    GNU C allows you to put a few global variables into specified
                   1016: hardware registers.  You can also specify the register in which an
                   1017: ordinary register variable should be allocated.
                   1018: 
                   1019:    * Global register variables reserve registers throughout the program.
                   1020:      This may be useful in programs such as programming language
                   1021:      interpreters which have a couple of global variables that are
                   1022:      accessed very often.
                   1023: 
                   1024:    * Local register variables in specific registers do not reserve the
                   1025:      registers.  The compiler's data flow analysis is capable of
                   1026:      determining where the specified registers contain live values, and
                   1027:      where they are available for other uses.
                   1028: 
                   1029:      These local variables are sometimes convenient for use with the
                   1030:      extended `asm' feature (*note Extended Asm::.), if you want to
                   1031:      write one output of the assembler instruction directly into a
                   1032:      particular register.  (This will work provided the register you
                   1033:      specify fits the constraints specified for that operand in the
                   1034:      `asm'.)
                   1035: 
                   1036: * Menu:
                   1037: 
                   1038: * Global Reg Vars::
                   1039: * Local Reg Vars::
                   1040: 
                   1041: 
                   1042: File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
                   1043: 
                   1044: Defining Global Register Variables
                   1045: ----------------------------------
                   1046: 
                   1047:    You can define a global register variable in GNU C like this:
                   1048: 
                   1049:      register int *foo asm ("a5");
                   1050: 
                   1051: Here `a5' is the name of the register which should be used.  Choose a
                   1052: register which is normally saved and restored by function calls on your
                   1053: machine, so that library routines will not clobber it.
                   1054: 
                   1055:    Naturally the register name is cpu-dependent, so you would need to
                   1056: conditionalize your program according to cpu type.  The register `a5'
                   1057: would be a good choice on a 68000 for a variable of pointer type.  On
                   1058: machines with register windows, be sure to choose a "global" register
                   1059: that is not affected magically by the function call mechanism.
                   1060: 
                   1061:    In addition, operating systems on one type of cpu may differ in how
                   1062: they name the registers; then you would need additional conditionals.
                   1063: For example, some 68000 operating systems call this register `%a5'.
                   1064: 
                   1065:    Eventually there may be a way of asking the compiler to choose a
                   1066: register automatically, but first we need to figure out how it should
                   1067: choose and how to enable you to guide the choice.  No solution is
                   1068: evident.
                   1069: 
                   1070:    Defining a global register variable in a certain register reserves
                   1071: that register entirely for this use, at least within the current
                   1072: compilation.  The register will not be allocated for any other purpose
                   1073: in the functions in the current compilation.  The register will not be
                   1074: saved and restored by these functions.  Stores into this register are
                   1075: never deleted even if they would appear to be dead, but references may
                   1076: be deleted or moved or simplified.
                   1077: 
                   1078:    It is not safe to access the global register variables from signal
                   1079: handlers, or from more than one thread of control, because the system
                   1080: library routines may temporarily use the register for other things
                   1081: (unless you recompile them specially for the task at hand).
                   1082: 
                   1083:    It is not safe for one function that uses a global register variable
                   1084: to call another such function `foo' by way of a third function `lose'
                   1085: that was compiled without knowledge of this variable (i.e. in a
                   1086: different source file in which the variable wasn't declared).  This is
                   1087: because `lose' might save the register and put some other value there.
                   1088: For example, you can't expect a global register variable to be
                   1089: available in the comparison-function that you pass to `qsort', since
                   1090: `qsort' might have put something else in that register.  (If you are
                   1091: prepared to recompile `qsort' with the same global register variable,
                   1092: you can solve this problem.)
                   1093: 
                   1094:    If you want to recompile `qsort' or other source files which do not
                   1095: actually use your global register variable, so that they will not use
                   1096: that register for any other purpose, then it suffices to specify the
                   1097: compiler option `-ffixed-REG'.  You need not actually add a global
                   1098: register declaration to their source code.
                   1099: 
                   1100:    A function which can alter the value of a global register variable
                   1101: cannot safely be called from a function compiled without this variable,
                   1102: because it could clobber the value the caller expects to find there on
                   1103: return.  Therefore, the function which is the entry point into the part
                   1104: of the program that uses the global register variable must explicitly
                   1105: save and restore the value which belongs to its caller.
                   1106: 
                   1107:    On most machines, `longjmp' will restore to each global register
                   1108: variable the value it had at the time of the `setjmp'.  On some
                   1109: machines, however, `longjmp' will not change the value of global
                   1110: register variables.  To be portable, the function that called `setjmp'
                   1111: should make other arrangements to save the values of the global register
                   1112: variables, and to restore them in a `longjmp'.  This way, the same
                   1113: thing will happen regardless of what `longjmp' does.
                   1114: 
                   1115:    All global register variable declarations must precede all function
                   1116: definitions.  If such a declaration could appear after function
                   1117: definitions, the declaration would be too late to prevent the register
                   1118: from being used for other purposes in the preceding functions.
                   1119: 
                   1120:    Global register variables may not have initial values, because an
                   1121: executable file has no means to supply initial contents for a register.
                   1122: 
                   1123:    On the Sparc, there are reports that g3 ... g7 are suitable
                   1124: registers, but certain library functions, such as `getwd', as well as
                   1125: the subroutines for division and remainder, modify g3 and g4.  g1 and
                   1126: g2 are local temporaries.
                   1127: 
                   1128:    On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
                   1129: course, it will not do to use more than a few of those.
                   1130: 
                   1131: 
                   1132: File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
                   1133: 
                   1134: Specifying Registers for Local Variables
                   1135: ----------------------------------------
                   1136: 
                   1137:    You can define a local register variable with a specified register
                   1138: like this:
                   1139: 
                   1140:      register int *foo asm ("a5");
                   1141: 
                   1142: Here `a5' is the name of the register which should be used.  Note that
                   1143: this is the same syntax used for defining global register variables,
                   1144: but for a local variable it would appear within a function.
                   1145: 
                   1146:    Naturally the register name is cpu-dependent, but this is not a
                   1147: problem, since specific registers are most often useful with explicit
                   1148: assembler instructions (*note Extended Asm::.).  Both of these things
                   1149: generally require that you conditionalize your program according to cpu
                   1150: type.
                   1151: 
                   1152:    In addition, operating systems on one type of cpu may differ in how
                   1153: they name the registers; then you would need additional conditionals.
                   1154: For example, some 68000 operating systems call this register `%a5'.
                   1155: 
                   1156:    Eventually there may be a way of asking the compiler to choose a
                   1157: register automatically, but first we need to figure out how it should
                   1158: choose and how to enable you to guide the choice.  No solution is
                   1159: evident.
                   1160: 
                   1161:    Defining such a register variable does not reserve the register; it
                   1162: remains available for other uses in places where flow control determines
                   1163: the variable's value is not live.  However, these registers are made
                   1164: unavailable for use in the reload pass.  I would not be surprised if
                   1165: excessive use of this feature leaves the compiler too few available
                   1166: registers to compile certain functions.
                   1167: 
                   1168: 
                   1169: File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
                   1170: 
                   1171: Alternate Keywords
                   1172: ==================
                   1173: 
                   1174:    The option `-traditional' disables certain keywords; `-ansi'
                   1175: disables certain others.  This causes trouble when you want to use GNU C
                   1176: extensions, or ANSI C features, in a general-purpose header file that
                   1177: should be usable by all programs, including ANSI C programs and
                   1178: traditional ones.  The keywords `asm', `typeof' and `inline' cannot be
                   1179: used since they won't work in a program compiled with `-ansi', while
                   1180: the keywords `const', `volatile', `signed', `typeof' and `inline' won't
                   1181: work in a program compiled with `-traditional'.
                   1182: 
                   1183:    The way to solve these problems is to put `__' at the beginning and
                   1184: end of each problematical keyword.  For example, use `__asm__' instead
                   1185: of `asm', `__const__' instead of `const', and `__inline__' instead of
                   1186: `inline'.
                   1187: 
                   1188:    Other C compilers won't accept these alternative keywords; if you
                   1189: want to compile with another compiler, you can define the alternate
                   1190: keywords as macros to replace them with the customary keywords.  It
                   1191: looks like this:
                   1192: 
                   1193:      #ifndef __GNUC__
                   1194:      #define __asm__ asm
                   1195:      #endif
                   1196: 
                   1197:    `-pedantic' causes warnings for many GNU C extensions.  You can
                   1198: prevent such warnings within one expression by writing `__extension__'
                   1199: before the expression.  `__extension__' has no effect aside from this.
                   1200: 
                   1201: 
                   1202: File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
                   1203: 
                   1204: Incomplete `enum' Types
                   1205: =======================
                   1206: 
                   1207:    You can define an `enum' tag without specifying its possible values.
                   1208: This results in an incomplete type, much like what you get if you write
                   1209: `struct foo' without describing the elements.  A later declaration
                   1210: which does specify the possible values completes the type.
                   1211: 
                   1212:    You can't allocate variables or storage using the type while it is
                   1213: incomplete.  However, you can work with pointers to that type.
                   1214: 
                   1215:    This extension may not be very useful, but it makes the handling of
                   1216: `enum' more consistent with the way `struct' and `union' are handled.
                   1217: 
                   1218: 
                   1219: File: gcc.info,  Node: Function Names,  Prev: Incomplete Enums,  Up: C Extensions
                   1220: 
                   1221: Function Names as Strings
                   1222: =========================
                   1223: 
                   1224:    GNU CC predefines two string variables to be the name of the current
                   1225: function.  The variable `__FUNCTION__' is the name of the function as
                   1226: it appears in the source.  The variable `__PRETTY_FUNCTION__' is the
                   1227: name of the function pretty printed in a language specific fashion.
                   1228: 
                   1229:    These names are always the same in a C function, but in a C++
                   1230: function they may be different.  For example, this program:
                   1231: 
                   1232:      extern "C" {
                   1233:      extern int printf (char *, ...);
                   1234:      }
                   1235:      
                   1236:      class a {
                   1237:       public:
                   1238:        sub (int i)
                   1239:          {
                   1240:            printf ("__FUNCTION__ = %s\n", __FUNCTION__);
                   1241:            printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
                   1242:          }
                   1243:      };
                   1244:      
                   1245:      int
                   1246:      main (void)
                   1247:      {
                   1248:        a ax;
                   1249:        ax.sub (0);
                   1250:        return 0;
                   1251:      }
                   1252: 
                   1253: gives this output:
                   1254: 
                   1255:      __FUNCTION__ = sub
                   1256:      __PRETTY_FUNCTION__ = int  a::sub (int)
                   1257: 

unix.superglobalmegacorp.com

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