Annotation of GNUtools/cc/gcc.info-7, revision 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.