Annotation of gcc/gcc.info-10, revision 1.1.1.8

1.1.1.7   root        1: This is Info file gcc.info, produced by Makeinfo-1.55 from the input
1.1       root        2: file gcc.texi.
                      3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
1.1.1.8 ! root        6:    Published by the Free Software Foundation 59 Temple Place - Suite 330
        !             7: Boston, MA 02111-1307 USA
1.1.1.5   root        8: 
1.1.1.8 ! root        9:    Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software
        !            10: Foundation, Inc.
1.1       root       11: 
1.1.1.3   root       12:    Permission is granted to make and distribute verbatim copies of this
                     13: manual provided the copyright notice and this permission notice are
                     14: preserved on all copies.
1.1       root       15: 
                     16:    Permission is granted to copy and distribute modified versions of
                     17: this manual under the conditions for verbatim copying, provided also
1.1.1.7   root       18: that the sections entitled "GNU General Public License," "Funding for
                     19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
                     20: included exactly as in the original, and provided that the entire
                     21: resulting derived work is distributed under the terms of a permission
                     22: notice identical to this one.
1.1       root       23: 
                     24:    Permission is granted to copy and distribute translations of this
                     25: manual into another language, under the above conditions for modified
1.1.1.3   root       26: versions, except that the sections entitled "GNU General Public
1.1.1.7   root       27: License," "Funding for Free Software," and "Protect Your Freedom--Fight
                     28: `Look And Feel'", and this permission notice, may be included in
                     29: translations approved by the Free Software Foundation instead of in the
                     30: original English.
1.1.1.3   root       31: 
                     32: 
1.1.1.8 ! root       33: File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Extended Asm,  Up: C Extensions
1.1.1.6   root       34: 
1.1.1.8 ! root       35: Controlling Names Used in Assembler Code
        !            36: ========================================
1.1.1.7   root       37: 
1.1.1.8 ! root       38:    You can specify the name to be used in the assembler code for a C
        !            39: function or variable by writing the `asm' (or `__asm__') keyword after
        !            40: the declarator as follows:
        !            41: 
        !            42:      int foo asm ("myfoo") = 2;
        !            43: 
        !            44: This specifies that the name to be used for the variable `foo' in the
        !            45: assembler code should be `myfoo' rather than the usual `_foo'.
        !            46: 
        !            47:    On systems where an underscore is normally prepended to the name of
        !            48: a C function or variable, this feature allows you to define names for
        !            49: the linker that do not start with an underscore.
        !            50: 
        !            51:    You cannot use `asm' in this way in a function *definition*; but you
        !            52: can get the same effect by writing a declaration for the function
        !            53: before its definition and putting `asm' there, like this:
        !            54: 
        !            55:      extern func () asm ("FUNC");
        !            56:      
        !            57:      func (x, y)
        !            58:           int x, y;
        !            59:      ...
        !            60: 
        !            61:    It is up to you to make sure that the assembler names you choose do
        !            62: not conflict with any other assembler symbols.  Also, you must not use a
        !            63: register name; that would produce completely invalid assembler code.
        !            64: GNU CC does not as yet have the ability to store static variables in
        !            65: registers.  Perhaps that will be added.
        !            66: 
        !            67: 
        !            68: File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: C Extensions
        !            69: 
        !            70: Variables in Specified Registers
        !            71: ================================
        !            72: 
        !            73:    GNU C allows you to put a few global variables into specified
        !            74: hardware registers.  You can also specify the register in which an
        !            75: ordinary register variable should be allocated.
        !            76: 
        !            77:    * Global register variables reserve registers throughout the program.
        !            78:      This may be useful in programs such as programming language
        !            79:      interpreters which have a couple of global variables that are
        !            80:      accessed very often.
        !            81: 
        !            82:    * Local register variables in specific registers do not reserve the
        !            83:      registers.  The compiler's data flow analysis is capable of
        !            84:      determining where the specified registers contain live values, and
        !            85:      where they are available for other uses.
        !            86: 
        !            87:      These local variables are sometimes convenient for use with the
        !            88:      extended `asm' feature (*note Extended Asm::.), if you want to
        !            89:      write one output of the assembler instruction directly into a
        !            90:      particular register.  (This will work provided the register you
        !            91:      specify fits the constraints specified for that operand in the
        !            92:      `asm'.)
1.1.1.7   root       93: 
1.1.1.8 ! root       94: * Menu:
1.1.1.7   root       95: 
1.1.1.8 ! root       96: * Global Reg Vars::
        !            97: * Local Reg Vars::
1.1.1.7   root       98: 
                     99: 
1.1.1.8 ! root      100: File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
1.1.1.7   root      101: 
1.1.1.8 ! root      102: Defining Global Register Variables
        !           103: ----------------------------------
1.1.1.7   root      104: 
1.1.1.8 ! root      105:    You can define a global register variable in GNU C like this:
        !           106: 
        !           107:      register int *foo asm ("a5");
        !           108: 
        !           109: Here `a5' is the name of the register which should be used.  Choose a
        !           110: register which is normally saved and restored by function calls on your
        !           111: machine, so that library routines will not clobber it.
        !           112: 
        !           113:    Naturally the register name is cpu-dependent, so you would need to
        !           114: conditionalize your program according to cpu type.  The register `a5'
        !           115: would be a good choice on a 68000 for a variable of pointer type.  On
        !           116: machines with register windows, be sure to choose a "global" register
        !           117: that is not affected magically by the function call mechanism.
        !           118: 
        !           119:    In addition, operating systems on one type of cpu may differ in how
        !           120: they name the registers; then you would need additional conditionals.
        !           121: For example, some 68000 operating systems call this register `%a5'.
        !           122: 
        !           123:    Eventually there may be a way of asking the compiler to choose a
        !           124: register automatically, but first we need to figure out how it should
        !           125: choose and how to enable you to guide the choice.  No solution is
        !           126: evident.
        !           127: 
        !           128:    Defining a global register variable in a certain register reserves
        !           129: that register entirely for this use, at least within the current
        !           130: compilation.  The register will not be allocated for any other purpose
        !           131: in the functions in the current compilation.  The register will not be
        !           132: saved and restored by these functions.  Stores into this register are
        !           133: never deleted even if they would appear to be dead, but references may
        !           134: be deleted or moved or simplified.
        !           135: 
        !           136:    It is not safe to access the global register variables from signal
        !           137: handlers, or from more than one thread of control, because the system
        !           138: library routines may temporarily use the register for other things
        !           139: (unless you recompile them specially for the task at hand).
        !           140: 
        !           141:    It is not safe for one function that uses a global register variable
        !           142: to call another such function `foo' by way of a third function `lose'
        !           143: that was compiled without knowledge of this variable (i.e. in a
        !           144: different source file in which the variable wasn't declared).  This is
        !           145: because `lose' might save the register and put some other value there.
        !           146: For example, you can't expect a global register variable to be
        !           147: available in the comparison-function that you pass to `qsort', since
        !           148: `qsort' might have put something else in that register.  (If you are
        !           149: prepared to recompile `qsort' with the same global register variable,
        !           150: you can solve this problem.)
        !           151: 
        !           152:    If you want to recompile `qsort' or other source files which do not
        !           153: actually use your global register variable, so that they will not use
        !           154: that register for any other purpose, then it suffices to specify the
        !           155: compiler option `-ffixed-REG'.  You need not actually add a global
        !           156: register declaration to their source code.
        !           157: 
        !           158:    A function which can alter the value of a global register variable
        !           159: cannot safely be called from a function compiled without this variable,
        !           160: because it could clobber the value the caller expects to find there on
        !           161: return.  Therefore, the function which is the entry point into the part
        !           162: of the program that uses the global register variable must explicitly
        !           163: save and restore the value which belongs to its caller.
        !           164: 
        !           165:    On most machines, `longjmp' will restore to each global register
        !           166: variable the value it had at the time of the `setjmp'.  On some
        !           167: machines, however, `longjmp' will not change the value of global
        !           168: register variables.  To be portable, the function that called `setjmp'
        !           169: should make other arrangements to save the values of the global register
        !           170: variables, and to restore them in a `longjmp'.  This way, the same
        !           171: thing will happen regardless of what `longjmp' does.
        !           172: 
        !           173:    All global register variable declarations must precede all function
        !           174: definitions.  If such a declaration could appear after function
        !           175: definitions, the declaration would be too late to prevent the register
        !           176: from being used for other purposes in the preceding functions.
        !           177: 
        !           178:    Global register variables may not have initial values, because an
        !           179: executable file has no means to supply initial contents for a register.
        !           180: 
        !           181:    On the Sparc, there are reports that g3 ... g7 are suitable
        !           182: registers, but certain library functions, such as `getwd', as well as
        !           183: the subroutines for division and remainder, modify g3 and g4.  g1 and
        !           184: g2 are local temporaries.
1.1.1.7   root      185: 
1.1.1.8 ! root      186:    On the 68000, a2 ... a5 should be suitable, as should d2 ... d7.  Of
        !           187: course, it will not do to use more than a few of those.
1.1.1.7   root      188: 
1.1.1.8 ! root      189: 
        !           190: File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
1.1.1.7   root      191: 
1.1.1.8 ! root      192: Specifying Registers for Local Variables
        !           193: ----------------------------------------
1.1.1.7   root      194: 
1.1.1.8 ! root      195:    You can define a local register variable with a specified register
        !           196: like this:
1.1.1.7   root      197: 
1.1.1.8 ! root      198:      register int *foo asm ("a5");
1.1.1.7   root      199: 
1.1.1.8 ! root      200: Here `a5' is the name of the register which should be used.  Note that
        !           201: this is the same syntax used for defining global register variables,
        !           202: but for a local variable it would appear within a function.
1.1.1.7   root      203: 
1.1.1.8 ! root      204:    Naturally the register name is cpu-dependent, but this is not a
        !           205: problem, since specific registers are most often useful with explicit
        !           206: assembler instructions (*note Extended Asm::.).  Both of these things
        !           207: generally require that you conditionalize your program according to cpu
        !           208: type.
1.1.1.7   root      209: 
1.1.1.8 ! root      210:    In addition, operating systems on one type of cpu may differ in how
        !           211: they name the registers; then you would need additional conditionals.
        !           212: For example, some 68000 operating systems call this register `%a5'.
1.1.1.7   root      213: 
1.1.1.8 ! root      214:    Eventually there may be a way of asking the compiler to choose a
        !           215: register automatically, but first we need to figure out how it should
        !           216: choose and how to enable you to guide the choice.  No solution is
        !           217: evident.
1.1.1.7   root      218: 
1.1.1.8 ! root      219:    Defining such a register variable does not reserve the register; it
        !           220: remains available for other uses in places where flow control determines
        !           221: the variable's value is not live.  However, these registers are made
        !           222: unavailable for use in the reload pass.  I would not be surprised if
        !           223: excessive use of this feature leaves the compiler too few available
        !           224: registers to compile certain functions.
1.1.1.7   root      225: 
                    226: 
1.1.1.8 ! root      227: File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: C Extensions
1.1.1.7   root      228: 
1.1.1.8 ! root      229: Alternate Keywords
1.1.1.6   root      230: ==================
                    231: 
1.1.1.8 ! root      232:    The option `-traditional' disables certain keywords; `-ansi'
        !           233: disables certain others.  This causes trouble when you want to use GNU C
        !           234: extensions, or ANSI C features, in a general-purpose header file that
        !           235: should be usable by all programs, including ANSI C programs and
        !           236: traditional ones.  The keywords `asm', `typeof' and `inline' cannot be
        !           237: used since they won't work in a program compiled with `-ansi', while
        !           238: the keywords `const', `volatile', `signed', `typeof' and `inline' won't
        !           239: work in a program compiled with `-traditional'.
        !           240: 
        !           241:    The way to solve these problems is to put `__' at the beginning and
        !           242: end of each problematical keyword.  For example, use `__asm__' instead
        !           243: of `asm', `__const__' instead of `const', and `__inline__' instead of
        !           244: `inline'.
        !           245: 
        !           246:    Other C compilers won't accept these alternative keywords; if you
        !           247: want to compile with another compiler, you can define the alternate
        !           248: keywords as macros to replace them with the customary keywords.  It
        !           249: looks like this:
        !           250: 
        !           251:      #ifndef __GNUC__
        !           252:      #define __asm__ asm
        !           253:      #endif
        !           254: 
        !           255:    `-pedantic' causes warnings for many GNU C extensions.  You can
        !           256: prevent such warnings within one expression by writing `__extension__'
        !           257: before the expression.  `__extension__' has no effect aside from this.
        !           258: 
        !           259: 
        !           260: File: gcc.info,  Node: Incomplete Enums,  Next: Function Names,  Prev: Alternate Keywords,  Up: C Extensions
        !           261: 
        !           262: Incomplete `enum' Types
        !           263: =======================
        !           264: 
        !           265:    You can define an `enum' tag without specifying its possible values.
        !           266: This results in an incomplete type, much like what you get if you write
        !           267: `struct foo' without describing the elements.  A later declaration
        !           268: which does specify the possible values completes the type.
        !           269: 
        !           270:    You can't allocate variables or storage using the type while it is
        !           271: incomplete.  However, you can work with pointers to that type.
        !           272: 
        !           273:    This extension may not be very useful, but it makes the handling of
        !           274: `enum' more consistent with the way `struct' and `union' are handled.
        !           275: 
        !           276:    This extension is not supported by GNU C++.
        !           277: 
        !           278: 
        !           279: File: gcc.info,  Node: Function Names,  Prev: Incomplete Enums,  Up: C Extensions
        !           280: 
        !           281: Function Names as Strings
        !           282: =========================
        !           283: 
        !           284:    GNU CC predefines two string variables to be the name of the current
        !           285: function.  The variable `__FUNCTION__' is the name of the function as
        !           286: it appears in the source.  The variable `__PRETTY_FUNCTION__' is the
        !           287: name of the function pretty printed in a language specific fashion.
        !           288: 
        !           289:    These names are always the same in a C function, but in a C++
        !           290: function they may be different.  For example, this program:
        !           291: 
        !           292:      extern "C" {
        !           293:      extern int printf (char *, ...);
        !           294:      }
        !           295:      
        !           296:      class a {
        !           297:       public:
        !           298:        sub (int i)
        !           299:          {
        !           300:            printf ("__FUNCTION__ = %s\n", __FUNCTION__);
        !           301:            printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
        !           302:          }
        !           303:      };
        !           304:      
        !           305:      int
        !           306:      main (void)
        !           307:      {
        !           308:        a ax;
        !           309:        ax.sub (0);
        !           310:        return 0;
        !           311:      }
        !           312: 
        !           313: gives this output:
        !           314: 
        !           315:      __FUNCTION__ = sub
        !           316:      __PRETTY_FUNCTION__ = int  a::sub (int)
        !           317: 
        !           318:    These names are not macros: they are predefined string variables.
        !           319: For example, `#ifdef __FUNCTION__' does not have any special meaning
        !           320: inside a function, since the preprocessor does not do anything special
        !           321: with the identifier `__FUNCTION__'.
        !           322: 
        !           323: 
        !           324: File: gcc.info,  Node: C++ Extensions,  Next: Trouble,  Prev: C Extensions,  Up: Top
        !           325: 
        !           326: Extensions to the C++ Language
        !           327: ******************************
        !           328: 
        !           329:    The GNU compiler provides these extensions to the C++ language (and
        !           330: you can also use most of the C language extensions in your C++
        !           331: programs).  If you want to write code that checks whether these
        !           332: features are available, you can test for the GNU compiler the same way
        !           333: as for C programs: check for a predefined macro `__GNUC__'.  You can
        !           334: also use `__GNUG__' to test specifically for GNU C++ (*note Standard
        !           335: Predefined Macros: (cpp.info)Standard Predefined.).
1.1.1.7   root      336: 
                    337: * Menu:
                    338: 
1.1.1.8 ! root      339: * Naming Results::      Giving a name to C++ function return values.
        !           340: * Min and Max::                C++ Minimum and maximum operators.
        !           341: * Destructors and Goto:: Goto is safe to use in C++ even when destructors
        !           342:                            are needed.
        !           343: * C++ Interface::       You can use a single C++ header file for both
        !           344:                          declarations and definitions.
        !           345: * Template Instantiation:: Methods for ensuring that exactly one copy of
        !           346:                          each needed template instantiation is emitted.
        !           347: * C++ Signatures::     You can specify abstract types to get subtype
        !           348:                         polymorphism independent from inheritance.
        !           349: 
        !           350: 
        !           351: File: gcc.info,  Node: Naming Results,  Next: Min and Max,  Up: C++ Extensions
        !           352: 
        !           353: Named Return Values in C++
        !           354: ==========================
        !           355: 
        !           356:    GNU C++ extends the function-definition syntax to allow you to
        !           357: specify a name for the result of a function outside the body of the
        !           358: definition, in C++ programs:
1.1.1.6   root      359: 
1.1.1.8 ! root      360:      TYPE
        !           361:      FUNCTIONNAME (ARGS) return RESULTNAME;
1.1.1.5   root      362:      {
                    363:        ...
1.1.1.8 ! root      364:        BODY
        !           365:        ...
        !           366:      }
1.1.1.7   root      367: 
1.1.1.8 ! root      368:    You can use this feature to avoid an extra constructor call when a
        !           369: function result has a class type.  For example, consider a function
        !           370: `m', declared as `X v = m ();', whose result is of class `X':
1.1.1.7   root      371: 
1.1.1.8 ! root      372:      X
        !           373:      m ()
        !           374:      {
        !           375:        X b;
        !           376:        b.a = 23;
        !           377:        return b;
        !           378:      }
        !           379: 
        !           380:    Although `m' appears to have no arguments, in fact it has one
        !           381: implicit argument: the address of the return value.  At invocation, the
        !           382: address of enough space to hold `v' is sent in as the implicit argument.
        !           383: Then `b' is constructed and its `a' field is set to the value 23.
        !           384: Finally, a copy constructor (a constructor of the form `X(X&)') is
        !           385: applied to `b', with the (implicit) return value location as the
        !           386: target, so that `v' is now bound to the return value.
        !           387: 
        !           388:    But this is wasteful.  The local `b' is declared just to hold
        !           389: something that will be copied right out.  While a compiler that
        !           390: combined an "elision" algorithm with interprocedural data flow analysis
        !           391: could conceivably eliminate all of this, it is much more practical to
        !           392: allow you to assist the compiler in generating efficient code by
        !           393: manipulating the return value explicitly, thus avoiding the local
        !           394: variable and copy constructor altogether.
        !           395: 
        !           396:    Using the extended GNU C++ function-definition syntax, you can avoid
        !           397: the temporary allocation and copying by naming `r' as your return value
        !           398: at the outset, and assigning to its `a' field directly:
1.1.1.7   root      399: 
1.1.1.8 ! root      400:      X
        !           401:      m () return r;
        !           402:      {
        !           403:        r.a = 23;
        !           404:      }
1.1.1.7   root      405: 
1.1.1.8 ! root      406: The declaration of `r' is a standard, proper declaration, whose effects
        !           407: are executed *before* any of the body of `m'.
1.1.1.7   root      408: 
1.1.1.8 ! root      409:    Functions of this type impose no additional restrictions; in
        !           410: particular, you can execute `return' statements, or return implicitly by
        !           411: reaching the end of the function body ("falling off the edge").  Cases
        !           412: like
1.1.1.7   root      413: 
1.1.1.8 ! root      414:      X
        !           415:      m () return r (23);
        !           416:      {
        !           417:        return;
        !           418:      }
1.1.1.7   root      419: 
1.1.1.8 ! root      420: (or even `X m () return r (23); { }') are unambiguous, since the return
        !           421: value `r' has been initialized in either case.  The following code may
        !           422: be hard to read, but also works predictably:
1.1.1.7   root      423: 
1.1.1.8 ! root      424:      X
        !           425:      m () return r;
        !           426:      {
        !           427:        X b;
        !           428:        return b;
        !           429:      }
        !           430: 
        !           431:    The return value slot denoted by `r' is initialized at the outset,
        !           432: but the statement `return b;' overrides this value.  The compiler deals
        !           433: with this by destroying `r' (calling the destructor if there is one, or
        !           434: doing nothing if there is not), and then reinitializing `r' with `b'.
        !           435: 
        !           436:    This extension is provided primarily to help people who use
        !           437: overloaded operators, where there is a great need to control not just
        !           438: the arguments, but the return values of functions.  For classes where
        !           439: the copy constructor incurs a heavy performance penalty (especially in
        !           440: the common case where there is a quick default constructor), this is a
        !           441: major savings.  The disadvantage of this extension is that you do not
        !           442: control when the default constructor for the return value is called: it
        !           443: is always called at the beginning.
        !           444: 
        !           445: 
        !           446: File: gcc.info,  Node: Min and Max,  Next: Destructors and Goto,  Prev: Naming Results,  Up: C++ Extensions
        !           447: 
        !           448: Minimum and Maximum Operators in C++
        !           449: ====================================
        !           450: 
        !           451:    It is very convenient to have operators which return the "minimum"
        !           452: or the "maximum" of two arguments.  In GNU C++ (but not in GNU C),
        !           453: 
        !           454: `A <? B'
        !           455:      is the "minimum", returning the smaller of the numeric values A
        !           456:      and B;
        !           457: 
        !           458: `A >? B'
        !           459:      is the "maximum", returning the larger of the numeric values A and
        !           460:      B.
        !           461: 
        !           462:    These operations are not primitive in ordinary C++, since you can
        !           463: use a macro to return the minimum of two things in C++, as in the
        !           464: following example.
        !           465: 
        !           466:      #define MIN(X,Y) ((X) < (Y) ? : (X) : (Y))
        !           467: 
        !           468: You might then use `int min = MIN (i, j);' to set MIN to the minimum
        !           469: value of variables I and J.
        !           470: 
        !           471:    However, side effects in `X' or `Y' may cause unintended behavior.
        !           472: For example, `MIN (i++, j++)' will fail, incrementing the smaller
        !           473: counter twice.  A GNU C extension allows you to write safe macros that
        !           474: avoid this kind of problem (*note Naming an Expression's Type: Naming
        !           475: Types.).  However, writing `MIN' and `MAX' as macros also forces you to
        !           476: use function-call notation notation for a fundamental arithmetic
        !           477: operation.  Using GNU C++ extensions, you can write `int min = i <? j;'
        !           478: instead.
        !           479: 
        !           480:    Since `<?' and `>?' are built into the compiler, they properly
        !           481: handle expressions with side-effects;  `int min = i++ <? j++;' works
        !           482: correctly.
        !           483: 
        !           484: 
        !           485: File: gcc.info,  Node: Destructors and Goto,  Next: C++ Interface,  Prev: Min and Max,  Up: C++ Extensions
        !           486: 
        !           487: `goto' and Destructors in GNU C++
        !           488: =================================
        !           489: 
        !           490:    In C++ programs, you can safely use the `goto' statement.  When you
        !           491: use it to exit a block which contains aggregates requiring destructors,
        !           492: the destructors will run before the `goto' transfers control.  (In ANSI
        !           493: C++, `goto' is restricted to targets within the current block.)
        !           494: 
        !           495:    The compiler still forbids using `goto' to *enter* a scope that
        !           496: requires constructors.
        !           497: 
        !           498: 
        !           499: File: gcc.info,  Node: C++ Interface,  Next: Template Instantiation,  Prev: Destructors and Goto,  Up: C++ Extensions
        !           500: 
        !           501: Declarations and Definitions in One Header
        !           502: ==========================================
        !           503: 
        !           504:    C++ object definitions can be quite complex.  In principle, your
        !           505: source code will need two kinds of things for each object that you use
        !           506: across more than one source file.  First, you need an "interface"
        !           507: specification, describing its structure with type declarations and
        !           508: function prototypes.  Second, you need the "implementation" itself.  It
        !           509: can be tedious to maintain a separate interface description in a header
        !           510: file, in parallel to the actual implementation.  It is also dangerous,
        !           511: since separate interface and implementation definitions may not remain
        !           512: parallel.
        !           513: 
        !           514:    With GNU C++, you can use a single header file for both purposes.
        !           515: 
        !           516:      *Warning:* The mechanism to specify this is in transition.  For the
        !           517:      nonce, you must use one of two `#pragma' commands; in a future
        !           518:      release of GNU C++, an alternative mechanism will make these
        !           519:      `#pragma' commands unnecessary.
        !           520: 
        !           521:    The header file contains the full definitions, but is marked with
        !           522: `#pragma interface' in the source code.  This allows the compiler to
        !           523: use the header file only as an interface specification when ordinary
        !           524: source files incorporate it with `#include'.  In the single source file
        !           525: where the full implementation belongs, you can use either a naming
        !           526: convention or `#pragma implementation' to indicate this alternate use
        !           527: of the header file.
        !           528: 
        !           529: `#pragma interface'
        !           530: `#pragma interface "SUBDIR/OBJECTS.h"'
        !           531:      Use this directive in *header files* that define object classes,
        !           532:      to save space in most of the object files that use those classes.
        !           533:      Normally, local copies of certain information (backup copies of
        !           534:      inline member functions, debugging information, and the internal
        !           535:      tables that implement virtual functions) must be kept in each
        !           536:      object file that includes class definitions.  You can use this
        !           537:      pragma to avoid such duplication.  When a header file containing
        !           538:      `#pragma interface' is included in a compilation, this auxiliary
        !           539:      information will not be generated (unless the main input source
        !           540:      file itself uses `#pragma implementation').  Instead, the object
        !           541:      files will contain references to be resolved at link time.
        !           542: 
        !           543:      The second form of this directive is useful for the case where you
        !           544:      have multiple headers with the same name in different directories.
        !           545:      If you use this form, you must specify the same string to `#pragma
        !           546:      implementation'.
        !           547: 
        !           548: `#pragma implementation'
        !           549: `#pragma implementation "OBJECTS.h"'
        !           550:      Use this pragma in a *main input file*, when you want full output
        !           551:      from included header files to be generated (and made globally
        !           552:      visible).  The included header file, in turn, should use `#pragma
        !           553:      interface'.  Backup copies of inline member functions, debugging
        !           554:      information, and the internal tables used to implement virtual
        !           555:      functions are all generated in implementation files.
        !           556: 
        !           557:      If you use `#pragma implementation' with no argument, it applies to
        !           558:      an include file with the same basename(1) as your source file.
        !           559:      For example, in `allclass.cc', `#pragma implementation' by itself
        !           560:      is equivalent to `#pragma implementation "allclass.h"'.
        !           561: 
        !           562:      In versions of GNU C++ prior to 2.6.0 `allclass.h' was treated as
        !           563:      an implementation file whenever you would include it from
        !           564:      `allclass.cc' even if you never specified `#pragma
        !           565:      implementation'.  This was deemed to be more trouble than it was
        !           566:      worth, however, and disabled.
        !           567: 
        !           568:      If you use an explicit `#pragma implementation', it must appear in
        !           569:      your source file *before* you include the affected header files.
        !           570: 
        !           571:      Use the string argument if you want a single implementation file to
        !           572:      include code from multiple header files.  (You must also use
        !           573:      `#include' to include the header file; `#pragma implementation'
        !           574:      only specifies how to use the file--it doesn't actually include
        !           575:      it.)
        !           576: 
        !           577:      There is no way to split up the contents of a single header file
        !           578:      into multiple implementation files.
        !           579: 
        !           580:    `#pragma implementation' and `#pragma interface' also have an effect
        !           581: on function inlining.
        !           582: 
        !           583:    If you define a class in a header file marked with `#pragma
        !           584: interface', the effect on a function defined in that class is similar to
        !           585: an explicit `extern' declaration--the compiler emits no code at all to
        !           586: define an independent version of the function.  Its definition is used
        !           587: only for inlining with its callers.
        !           588: 
        !           589:    Conversely, when you include the same header file in a main source
        !           590: file that declares it as `#pragma implementation', the compiler emits
        !           591: code for the function itself; this defines a version of the function
        !           592: that can be found via pointers (or by callers compiled without
        !           593: inlining).  If all calls to the function can be inlined, you can avoid
        !           594: emitting the function by compiling with `-fno-implement-inlines'.  If
        !           595: any calls were not inlined, you will get linker errors.
        !           596: 
        !           597:    ---------- Footnotes ----------
1.1.1.7   root      598: 
1.1.1.8 ! root      599:    (1)  A file's "basename" was the name stripped of all leading path
        !           600: information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
1.1.1.7   root      601: 
                    602: 
1.1.1.8 ! root      603: File: gcc.info,  Node: Template Instantiation,  Next: C++ Signatures,  Prev: C++ Interface,  Up: C++ Extensions
1.1.1.7   root      604: 
1.1.1.8 ! root      605: Where's the Template?
        !           606: =====================
1.1.1.7   root      607: 
1.1.1.8 ! root      608:    C++ templates are the first language feature to require more
        !           609: intelligence from the environment than one usually finds on a UNIX
        !           610: system.  Somehow the compiler and linker have to make sure that each
        !           611: template instance occurs exactly once in the executable if it is needed,
        !           612: and not at all otherwise.  There are two basic approaches to this
        !           613: problem, which I will refer to as the Borland model and the Cfront
        !           614: model.
        !           615: 
        !           616: Borland model
        !           617:      Borland C++ solved the template instantiation problem by adding
        !           618:      the code equivalent of common blocks to their linker; template
        !           619:      instances are emitted in each translation unit that uses them, and
        !           620:      they are collapsed together at run time.  The advantage of this
        !           621:      model is that the linker only has to consider the object files
        !           622:      themselves; there is no external complexity to worry about.  This
        !           623:      disadvantage is that compilation time is increased because the
        !           624:      template code is being compiled repeatedly.  Code written for this
        !           625:      model tends to include definitions of all member templates in the
        !           626:      header file, since they must be seen to be compiled.
        !           627: 
        !           628: Cfront model
        !           629:      The AT&T C++ translator, Cfront, solved the template instantiation
        !           630:      problem by creating the notion of a template repository, an
        !           631:      automatically maintained place where template instances are
        !           632:      stored.  As individual object files are built, notes are placed in
        !           633:      the repository to record where templates and potential type
        !           634:      arguments were seen so that the subsequent instantiation step
        !           635:      knows where to find them.  At link time, any needed instances are
        !           636:      generated and linked in.  The advantages of this model are more
        !           637:      optimal compilation speed and the ability to use the system
        !           638:      linker; to implement the Borland model a compiler vendor also
        !           639:      needs to replace the linker.  The disadvantages are vastly
        !           640:      increased complexity, and thus potential for error; theoretically,
        !           641:      this should be just as transparent, but in practice it has been
        !           642:      very difficult to build multiple programs in one directory and one
        !           643:      program in multiple directories using Cfront.  Code written for
        !           644:      this model tends to separate definitions of non-inline member
        !           645:      templates into a separate file, which is magically found by the
        !           646:      link preprocessor when a template needs to be instantiated.
        !           647: 
        !           648:    Currently, g++ implements neither automatic model.  In the mean time,
        !           649: you have three options for dealing with template instantiations:
        !           650: 
        !           651:   1. Do nothing.  Pretend g++ does implement automatic instantiation
        !           652:      management.  Code written for the Borland model will work fine, but
        !           653:      each translation unit will contain instances of each of the
        !           654:      templates it uses.  In a large program, this can lead to an
        !           655:      unacceptable amount of code duplication.
        !           656: 
        !           657:   2. Add `#pragma interface' to all files containing template
        !           658:      definitions.  For each of these files, add `#pragma implementation
        !           659:      "FILENAME"' to the top of some `.C' file which `#include's it.
        !           660:      Then compile everything with -fexternal-templates.  The templates
        !           661:      will then only be expanded in the translation unit which
        !           662:      implements them (i.e. has a `#pragma implementation' line for the
        !           663:      file where they live); all other files will use external
        !           664:      references.  If you're lucky, everything should work properly.  If
        !           665:      you get undefined symbol errors, you need to make sure that each
        !           666:      template instance which is used in the program is used in the file
        !           667:      which implements that template.  If you don't have any use for a
        !           668:      particular instance in that file, you can just instantiate it
        !           669:      explicitly, using the syntax from the latest C++ working paper:
        !           670: 
        !           671:           template class A<int>;
        !           672:           template ostream& operator << (ostream&, const A<int>&);
        !           673: 
        !           674:      This strategy will work with code written for either model.  If
        !           675:      you are using code written for the Cfront model, the file
        !           676:      containing a class template and the file containing its member
        !           677:      templates should be implemented in the same translation unit.
        !           678: 
        !           679:      A slight variation on this approach is to use the flag
        !           680:      -falt-external-templates instead; this flag causes template
        !           681:      instances to be emitted in the translation unit that implements
        !           682:      the header where they are first instantiated, rather than the one
        !           683:      which implements the file where the templates are defined.  This
        !           684:      header must be the same in all translation units, or things are
        !           685:      likely to break.
        !           686: 
        !           687:      *Note Declarations and Definitions in One Header: C++ Interface,
        !           688:      for more discussion of these pragmas.
        !           689: 
        !           690:   3. Explicitly instantiate all the template instances you use, and
        !           691:      compile with -fno-implicit-templates.  This is probably your best
        !           692:      bet; it may require more knowledge of exactly which templates you
        !           693:      are using, but it's less mysterious than the previous approach,
        !           694:      and it doesn't require any `#pragma's or other g++-specific code.
        !           695:      You can scatter the instantiations throughout your program, you
        !           696:      can create one big file to do all the instantiations, or you can
        !           697:      create tiny files like
1.1.1.7   root      698: 
1.1.1.8 ! root      699:           #include "Foo.h"
        !           700:           #include "Foo.cc"
        !           701:           
        !           702:           template class Foo<int>;
1.1.1.7   root      703: 
1.1.1.8 ! root      704:      for each instance you need, and create a template instantiation
        !           705:      library from those.  I'm partial to the last, but your mileage may
        !           706:      vary.  If you are using Cfront-model code, you can probably get
        !           707:      away with not using -fno-implicit-templates when compiling files
        !           708:      that don't `#include' the member template definitions.
        !           709: 
        !           710: 
        !           711: File: gcc.info,  Node: C++ Signatures,  Prev: Template Instantiation,  Up: C++ Extensions
        !           712: 
        !           713: Type Abstraction using Signatures
        !           714: =================================
        !           715: 
        !           716:    In GNU C++, you can use the keyword `signature' to define a
        !           717: completely abstract class interface as a datatype.  You can connect this
        !           718: abstraction with actual classes using signature pointers.  If you want
        !           719: to use signatures, run the GNU compiler with the `-fhandle-signatures'
        !           720: command-line option.  (With this option, the compiler reserves a second
        !           721: keyword `sigof' as well, for a future extension.)
        !           722: 
        !           723:    Roughly, signatures are type abstractions or interfaces of classes.
        !           724: Some other languages have similar facilities.  C++ signatures are
        !           725: related to ML's signatures, Haskell's type classes, definition modules
        !           726: in Modula-2, interface modules in Modula-3, abstract types in Emerald,
        !           727: type modules in Trellis/Owl, categories in Scratchpad II, and types in
        !           728: POOL-I.  For a more detailed discussion of signatures, see `Signatures:
        !           729: A Language Extension for Improving Type Abstraction and Subtype
        !           730: Polymorphism in C++' by Gerald Baumgartner and Vincent F. Russo (Tech
        !           731: report CSD-TR-95-051, Dept. of Computer Sciences, Purdue University,
        !           732: August 1995, a slightly improved version appeared in
        !           733: *Software--Practice & Experience*, 25(8), pp. 863-889, August 1995).
        !           734: You can get the tech report by anonymous FTP from `ftp.cs.purdue.edu'
        !           735: in `pub/gb/Signature-design.ps.gz'.
        !           736: 
        !           737:    Syntactically, a signature declaration is a collection of member
        !           738: function declarations and nested type declarations.  For example, this
        !           739: signature declaration defines a new abstract type `S' with member
        !           740: functions `int foo ()' and `int bar (int)':
1.1.1.7   root      741: 
1.1.1.8 ! root      742:      signature S
        !           743:      {
        !           744:        int foo ();
        !           745:        int bar (int);
        !           746:      };
1.1.1.7   root      747: 
1.1.1.8 ! root      748:    Since signature types do not include implementation definitions, you
        !           749: cannot write an instance of a signature directly.  Instead, you can
        !           750: define a pointer to any class that contains the required interfaces as a
        !           751: "signature pointer".  Such a class "implements" the signature type.
        !           752: 
        !           753:    To use a class as an implementation of `S', you must ensure that the
        !           754: class has public member functions `int foo ()' and `int bar (int)'.
        !           755: The class can have other member functions as well, public or not; as
        !           756: long as it offers what's declared in the signature, it is suitable as
        !           757: an implementation of that signature type.
        !           758: 
        !           759:    For example, suppose that `C' is a class that meets the requirements
        !           760: of signature `S' (`C' "conforms to" `S').  Then
        !           761: 
        !           762:      C obj;
        !           763:      S * p = &obj;
        !           764: 
        !           765: defines a signature pointer `p' and initializes it to point to an
        !           766: object of type `C'.  The member function call `int i = p->foo ();'
        !           767: executes `obj.foo ()'.
        !           768: 
        !           769:    Abstract virtual classes provide somewhat similar facilities in
        !           770: standard C++.  There are two main advantages to using signatures
        !           771: instead:
        !           772: 
        !           773:   1. Subtyping becomes independent from inheritance.  A class or
        !           774:      signature type `T' is a subtype of a signature type `S'
        !           775:      independent of any inheritance hierarchy as long as all the member
        !           776:      functions declared in `S' are also found in `T'.  So you can
        !           777:      define a subtype hierarchy that is completely independent from any
        !           778:      inheritance (implementation) hierarchy, instead of being forced to
        !           779:      use types that mirror the class inheritance hierarchy.
        !           780: 
        !           781:   2. Signatures allow you to work with existing class hierarchies as
        !           782:      implementations of a signature type.  If those class hierarchies
        !           783:      are only available in compiled form, you're out of luck with
        !           784:      abstract virtual classes, since an abstract virtual class cannot
        !           785:      be retrofitted on top of existing class hierarchies.  So you would
        !           786:      be required to write interface classes as subtypes of the abstract
        !           787:      virtual class.
        !           788: 
        !           789:    There is one more detail about signatures.  A signature declaration
        !           790: can contain member function *definitions* as well as member function
        !           791: declarations.  A signature member function with a full definition is
        !           792: called a *default implementation*; classes need not contain that
        !           793: particular interface in order to conform.  For example, a class `C' can
        !           794: conform to the signature
1.1.1.7   root      795: 
1.1.1.8 ! root      796:      signature T
        !           797:      {
        !           798:        int f (int);
        !           799:        int f0 () { return f (0); };
        !           800:      };
1.1.1.7   root      801: 
1.1.1.8 ! root      802: whether or not `C' implements the member function `int f0 ()'.  If you
        !           803: define `C::f0', that definition takes precedence; otherwise, the
        !           804: default implementation `S::f0' applies.
1.1.1.7   root      805: 
1.1.1.8 ! root      806: 
        !           807: File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: C++ Extensions,  Up: Top
1.1.1.7   root      808: 
1.1.1.8 ! root      809: Known Causes of Trouble with GNU CC
        !           810: ***********************************
1.1.1.7   root      811: 
1.1.1.8 ! root      812:    This section describes known problems that affect users of GNU CC.
        !           813: Most of these are not GNU CC bugs per se--if they were, we would fix
        !           814: them.  But the result for a user may be like the result of a bug.
1.1.1.7   root      815: 
1.1.1.8 ! root      816:    Some of these problems are due to bugs in other software, some are
        !           817: missing features that are too much work to add, and some are places
        !           818: where people's opinions differ as to what is best.
1.1.1.7   root      819: 
                    820: * Menu:
                    821: 
1.1.1.8 ! root      822: * Actual Bugs::                      Bugs we will fix later.
        !           823: * Installation Problems::     Problems that manifest when you install GNU CC.
        !           824: * Cross-Compiler Problems::   Common problems of cross compiling with GNU CC.
        !           825: * Interoperation::      Problems using GNU CC with other compilers,
        !           826:                           and with certain linkers, assemblers and debuggers.
        !           827: * External Bugs::      Problems compiling certain programs.
        !           828: * Incompatibilities::   GNU CC is incompatible with traditional C.
        !           829: * Fixed Headers::       GNU C uses corrected versions of system header files.
        !           830:                            This is necessary, but doesn't always work smoothly.
        !           831: * Standard Libraries::  GNU C uses the system C library, which might not be
        !           832:                            compliant with the ISO/ANSI C standard.
        !           833: * Disappointments::     Regrettable things we can't change, but not quite bugs.
        !           834: * C++ Misunderstandings::     Common misunderstandings with GNU C++.
        !           835: * Protoize Caveats::    Things to watch out for when using `protoize'.
        !           836: * Non-bugs::           Things we think are right, but some others disagree.
        !           837: * Warnings and Errors:: Which problems in your code get warnings,
        !           838:                          and which get errors.
        !           839: 
        !           840: 
        !           841: File: gcc.info,  Node: Actual Bugs,  Next: Installation Problems,  Up: Trouble
        !           842: 
        !           843: Actual Bugs We Haven't Fixed Yet
        !           844: ================================
        !           845: 
        !           846:    * The `fixincludes' script interacts badly with automounters; if the
        !           847:      directory of system header files is automounted, it tends to be
        !           848:      unmounted while `fixincludes' is running.  This would seem to be a
        !           849:      bug in the automounter.  We don't know any good way to work around
        !           850:      it.
        !           851: 
        !           852:    * The `fixproto' script will sometimes add prototypes for the
        !           853:      `sigsetjmp' and `siglongjmp' functions that reference the
        !           854:      `jmp_buf' type before that type is defined.  To work around this,
        !           855:      edit the offending file and place the typedef in front of the
        !           856:      prototypes.
        !           857: 
        !           858:    * There are several obscure case of mis-using struct, union, and
        !           859:      enum tags that are not detected as errors by the compiler.
        !           860: 
        !           861:    * When `-pedantic-errors' is specified, GNU C will incorrectly give
        !           862:      an error message when a function name is specified in an expression
        !           863:      involving the comma operator.
        !           864: 
        !           865:    * Loop unrolling doesn't work properly for certain C++ programs.
        !           866:      This is a bug in the C++ front end.  It sometimes emits incorrect
        !           867:      debug info, and the loop unrolling code is unable to recover from
        !           868:      this error.
1.1.1.2   root      869: 

unix.superglobalmegacorp.com

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