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

1.1.1.9 ! root        1: This is Info file gcc.info, produced by Makeinfo version 1.67 from the
        !             2: input file gcc.texi.
1.1       root        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.