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

1.1       root        1: This is Info file gcc.info, produced by Makeinfo-1.54 from the input
                      2: file gcc.texi.
                      3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
                      6:    Published by the Free Software Foundation 675 Massachusetts Avenue
                      7: Cambridge, MA 02139 USA
                      8: 
                      9:    Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc.
                     10: 
                     11:    Permission is granted to make and distribute verbatim copies of this
                     12: manual provided the copyright notice and this permission notice are
                     13: preserved on all copies.
                     14: 
                     15:    Permission is granted to copy and distribute modified versions of
                     16: this manual under the conditions for verbatim copying, provided also
                     17: that the sections entitled "GNU General Public License" and "Protect
                     18: Your Freedom--Fight `Look And Feel'" are included exactly as in the
                     19: original, and provided that the entire resulting derived work is
                     20: distributed under the terms of a permission notice identical to this
                     21: one.
                     22: 
                     23:    Permission is granted to copy and distribute translations of this
                     24: manual into another language, under the above conditions for modified
                     25: versions, except that the sections entitled "GNU General Public
                     26: License" and "Protect Your Freedom--Fight `Look And Feel'", and this
                     27: permission notice, may be included in translations approved by the Free
                     28: Software Foundation instead of in the original English.
                     29: 
                     30: 
                     31: File: gcc.info,  Node: Invoking G++,  Next: C Dialect Options,  Prev: Overall Options,  Up: Invoking GCC
                     32: 
                     33: Compiling C++ Programs
                     34: ======================
                     35: 
                     36:    C++ source files conventionally use one of the suffixes `.C', `.cc',
                     37: or `.cxx'; preprocessed C++ files use the suffix `.ii'.  GNU CC
                     38: recognizes files with these names and compiles them as C++ programs
                     39: even if you call the compiler the same way as for compiling C programs
                     40: (usually with the name `gcc').
                     41: 
                     42:    However, C++ programs often require class libraries as well as a
                     43: compiler that understands the C++ language--and under some
                     44: circumstances, you might want to compile programs from standard input,
                     45: or otherwise without a suffix that flags them as C++ programs.  `g++'
                     46: is a shell script that calls GNU CC with the default language set to
                     47: C++, and automatically specifies linking against the GNU class library
                     48: libg++.  (1) On many systems, the script `g++' is also installed with
                     49: the name `c++'.
                     50: 
                     51:    When you compile C++ programs, you may specify many of the same
                     52: command-line options that you use for compiling programs in any
                     53: language; or command-line options meaningful for C and related
                     54: languages; or options that are meaningful only for C++ programs.  *Note
                     55: Options Controlling C Dialect: C Dialect Options, for explanations of
                     56: options for languages related to C.  *Note Options Controlling C++
                     57: Dialect: C++ Dialect Options, for explanations of options that are
                     58: meaningful only for C++ programs.
                     59: 
                     60:    ---------- Footnotes ----------
                     61: 
                     62:    (1)  Prior to release 2 of the compiler, there was a separate `g++'
                     63: compiler.  That version was based on GNU CC, but not integrated with
                     64: it.  Versions of `g++' with a `1.XX' version number--for example, `g++'
                     65: version 1.37 or 1.42--are much less reliable than the versions
                     66: integrated with GCC 2.  Moreover, combining G++ `1.XX' with a version 2
                     67: GCC will simply not work.
                     68: 
                     69: 
                     70: File: gcc.info,  Node: C Dialect Options,  Next: C++ Dialect Options,  Prev: Invoking G++,  Up: Invoking GCC
                     71: 
                     72: Options Controlling C Dialect
                     73: =============================
                     74: 
                     75:    The following options control the dialect of C (or languages derived
                     76: from C, such as C++ and Objective C) that the compiler accepts:
                     77: 
                     78: `-ansi'
                     79:      Support all ANSI standard C programs.
                     80: 
                     81:      This turns off certain features of GNU C that are incompatible
                     82:      with ANSI C, such as the `asm', `inline' and `typeof' keywords, and
                     83:      predefined macros such as `unix' and `vax' that identify the type
                     84:      of system you are using.  It also enables the undesirable and
                     85:      rarely used ANSI trigraph feature, and disallows `$' as part of
                     86:      identifiers.
                     87: 
                     88:      The alternate keywords `__asm__', `__extension__', `__inline__'
                     89:      and `__typeof__' continue to work despite `-ansi'.  You would not
                     90:      want to use them in an ANSI C program, of course, but it useful to
                     91:      put them in header files that might be included in compilations
                     92:      done with `-ansi'.  Alternate predefined macros such as `__unix__'
                     93:      and `__vax__' are also available, with or without `-ansi'.
                     94: 
                     95:      The `-ansi' option does not cause non-ANSI programs to be rejected
                     96:      gratuitously.  For that, `-pedantic' is required in addition to
                     97:      `-ansi'.  *Note Warning Options::.
                     98: 
                     99:      The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
                    100:      is used.  Some header files may notice this macro and refrain from
                    101:      declaring certain functions or defining certain macros that the
                    102:      ANSI standard doesn't call for; this is to avoid interfering with
                    103:      any programs that might use these names for other things.
                    104: 
                    105:      The functions `alloca', `abort', `exit', and `_exit' are not
                    106:      builtin functions when `-ansi' is used.
                    107: 
                    108: `-fno-asm'
                    109:      Do not recognize `asm', `inline' or `typeof' as a keyword.  These
                    110:      words may then be used as identifiers.  You can use the keywords
                    111:      `__asm__', `__inline__' and `__typeof__' instead.  `-ansi' implies
                    112:      `-fno-asm'.
                    113: 
                    114: `-fno-builtin'
                    115:      Don't recognize builtin functions that do not begin with two
                    116:      leading underscores.  Currently, the functions affected include
                    117:      `abort', `abs', `alloca', `cos', `exit', `fabs', `ffs', `labs',
                    118:      `memcmp', `memcpy', `sin', `sqrt', `strcmp', `strcpy', and
                    119:      `strlen'.
                    120: 
                    121:      GCC normally generates special code to handle certain builtin
                    122:      functions more efficiently; for instance, calls to `alloca' may
                    123:      become single instructions that adjust the stack directly, and
                    124:      calls to `memcpy' may become inline copy loops.  The resulting
                    125:      code is often both smaller and faster, but since the function
                    126:      calls no longer appear as such, you cannot set a breakpoint on
                    127:      those calls, nor can you change the behavior of the functions by
                    128:      linking with a different library.
                    129: 
                    130:      The `-ansi' option prevents `alloca' and `ffs' from being builtin
                    131:      functions, since these functions do not have an ANSI standard
                    132:      meaning.
                    133: 
                    134: `-trigraphs'
                    135:      Support ANSI C trigraphs.  You don't want to know about this
                    136:      brain-damage.  The `-ansi' option implies `-trigraphs'.
                    137: 
                    138: `-traditional'
                    139:      Attempt to support some aspects of traditional C compilers.
                    140:      Specifically:
                    141: 
                    142:         * All `extern' declarations take effect globally even if they
                    143:           are written inside of a function definition.  This includes
                    144:           implicit declarations of functions.
                    145: 
                    146:         * The newer keywords `typeof', `inline', `signed', `const' and
                    147:           `volatile' are not recognized.  (You can still use the
                    148:           alternative keywords such as `__typeof__', `__inline__', and
                    149:           so on.)
                    150: 
                    151:         * Comparisons between pointers and integers are always allowed.
                    152: 
                    153:         * Integer types `unsigned short' and `unsigned char' promote to
                    154:           `unsigned int'.
                    155: 
                    156:         * Out-of-range floating point literals are not an error.
                    157: 
                    158:         * Certain constructs which ANSI regards as a single invalid
                    159:           preprocessing number, such as `0xe-0xd', are treated as
                    160:           expressions instead.
                    161: 
                    162:         * String "constants" are not necessarily constant; they are
                    163:           stored in writable space, and identical looking constants are
                    164:           allocated separately.  (This is the same as the effect of
                    165:           `-fwritable-strings'.)
                    166: 
                    167:         * All automatic variables not declared `register' are preserved
                    168:           by `longjmp'.  Ordinarily, GNU C follows ANSI C: automatic
                    169:           variables not declared `volatile' may be clobbered.
                    170: 
                    171:         * In the preprocessor, comments convert to nothing at all,
                    172:           rather than to a space.  This allows traditional token
                    173:           concatenation.
                    174: 
                    175:         * In the preprocessor, macro arguments are recognized within
                    176:           string constants in a macro definition (and their values are
                    177:           stringified, though without additional quote marks, when they
                    178:           appear in such a context).  The preprocessor always considers
                    179:           a string constant to end at a newline.
                    180: 
                    181:         * The predefined macro `__STDC__' is not defined when you use
                    182:           `-traditional', but `__GNUC__' is (since the GNU extensions
                    183:           which `__GNUC__' indicates are not affected by
                    184:           `-traditional').  If you need to write header files that work
                    185:           differently depending on whether `-traditional' is in use, by
                    186:           testing both of these predefined macros you can distinguish
                    187:           four situations: GNU C, traditional GNU C, other ANSI C
                    188:           compilers, and other old C compilers.  *Note Standard
                    189:           Predefined Macros: (cpp.info)Standard Predefined, for more
                    190:           discussion of these and other predefined macros.
                    191: 
                    192:         * The preprocessor considers a string constant to end at a
                    193:           newline (unless the newline is escaped with `\').  (Without
                    194:           `-traditional', string constants can contain the newline
                    195:           character as typed.)
                    196: 
                    197:         * The character escape sequences `\x' and `\a' evaluate as the
                    198:           literal characters `x' and `a' respectively.  Without
                    199:           `-traditional', `\x' is a prefix for the hexadecimal
                    200:           representation of a character, and `\a' produces a bell.
                    201: 
                    202:         * In C++ programs, assignment to `this' is permitted with
                    203:           `-traditional'.  (The option `-fthis-is-variable' also has
                    204:           this effect.)
                    205: 
                    206:      You may wish to use `-fno-builtin' as well as `-traditional' if
                    207:      your program uses names that are normally GNU C builtin functions
                    208:      for other purposes of its own.
                    209: 
                    210: `-traditional-cpp'
                    211:      Attempt to support some aspects of traditional C preprocessors.
                    212:      This includes the last three items in the table immediately above,
                    213:      but none of the other effects of `-traditional'.
                    214: 
                    215: `-fcond-mismatch'
                    216:      Allow conditional expressions with mismatched types in the second
                    217:      and third arguments.  The value of such an expression is void.
                    218: 
                    219: `-funsigned-char'
                    220:      Let the type `char' be unsigned, like `unsigned char'.
                    221: 
                    222:      Each kind of machine has a default for what `char' should be.  It
                    223:      is either like `unsigned char' by default or like `signed char' by
                    224:      default.
                    225: 
                    226:      Ideally, a portable program should always use `signed char' or
                    227:      `unsigned char' when it depends on the signedness of an object.
                    228:      But many programs have been written to use plain `char' and expect
                    229:      it to be signed, or expect it to be unsigned, depending on the
                    230:      machines they were written for.  This option, and its inverse, let
                    231:      you make such a program work with the opposite default.
                    232: 
                    233:      The type `char' is always a distinct type from each of `signed
                    234:      char' or `unsigned char', even though its behavior is always just
                    235:      like one of those two.
                    236: 
                    237: `-fsigned-char'
                    238:      Let the type `char' be signed, like `signed char'.
                    239: 
                    240:      Note that this is equivalent to `-fno-unsigned-char', which is the
                    241:      negative form of `-funsigned-char'.  Likewise, the option
                    242:      `-fno-signed-char' is equivalent to `-funsigned-char'.
                    243: 
                    244: `-fsigned-bitfields'
                    245: `-funsigned-bitfields'
                    246: `-fno-signed-bitfields'
                    247: `-fno-unsigned-bitfields'
                    248:      These options control whether a bitfield is signed or unsigned,
                    249:      when the declaration does not use either `signed' or `unsigned'.
                    250:      By default, such a bitfield is signed, because this is consistent:
                    251:      the basic integer types such as `int' are signed types.
                    252: 
                    253:      However, when `-traditional' is used, bitfields are all unsigned
                    254:      no matter what.
                    255: 
                    256: `-fwritable-strings'
                    257:      Store string constants in the writable data segment and don't
                    258:      uniquize them.  This is for compatibility with old programs which
                    259:      assume they can write into string constants.  The option
                    260:      `-traditional' also has this effect.
                    261: 
                    262:      Writing into string constants is a very bad idea; "constants"
                    263:      should be constant.
                    264: 
                    265: `-fallow-single-precision'
                    266:      Do not promote single precision math operations to double
                    267:      precision, even when compiling with `-traditional'.
                    268: 
                    269:      Traditional K&R C promotes all floating point operations to double
                    270:      precision, regardless of the sizes of the operands.   On the
                    271:      architecture for which you are compiling, single precision may be
                    272:      faster than double precision.   If you must use `-traditional',
                    273:      but want to use single precision operations when the operands are
                    274:      single precision, use this option.   This option has no effect
                    275:      when compiling with ANSI or GNU C conventions (the default).
                    276: 
                    277: 
                    278: File: gcc.info,  Node: C++ Dialect Options,  Next: Warning Options,  Prev: C Dialect Options,  Up: Invoking GCC
                    279: 
                    280: Options Controlling C++ Dialect
                    281: ===============================
                    282: 
                    283:    This section describes the command-line options that are only
                    284: meaningful for C++ programs; but you can also use most of the GNU
                    285: compiler options regardless of what language your program is in.  For
                    286: example, you might compile a file `firstClass.C' like this:
                    287: 
                    288:      g++ -g -felide-constructors -O -c firstClass.C
                    289: 
                    290: In this example, only `-felide-constructors' is an option meant only
                    291: for C++ programs; you can use the other options with any language
                    292: supported by GNU CC.
                    293: 
                    294:    Here is a list of options that are *only* for compiling C++ programs:
                    295: 
                    296: `-fall-virtual'
                    297:      Treat all possible member functions as virtual, implicitly.  All
                    298:      member functions (except for constructor functions and `new' or
                    299:      `delete' member operators) are treated as virtual functions of the
                    300:      class where they appear.
                    301: 
                    302:      This does not mean that all calls to these member functions will
                    303:      be made through the internal table of virtual functions.  Under
                    304:      some circumstances, the compiler can determine that a call to a
                    305:      given virtual function can be made directly; in these cases the
                    306:      calls are direct in any case.
                    307: 
                    308: `-fdollars-in-identifiers'
                    309:      Accept `$' in identifiers.  You can also explicitly prohibit use of
                    310:      `$' with the option `-fno-dollars-in-identifiers'.  (GNU C++
                    311:      allows `$' by default on some target systems but not others.)
                    312:      Traditional C allowed the character `$' to form part of
                    313:      identifiers.  However, ANSI C and C++ forbid `$' in identifiers.
                    314: 
                    315: `-felide-constructors'
                    316:      Elide constructors when this seems plausible.  With this option,
                    317:      GNU C++ initializes `y' directly from the call to `foo' without
                    318:      going through a temporary in the following code:
                    319: 
                    320:           A foo ();
                    321:           A y = foo ();
                    322: 
                    323:      Without this option, GNU C++ (1) initializes `y' by calling the
                    324:      appropriate constructor for type `A'; (2) assigns the result of
                    325:      `foo' to a temporary; and, finally, (3) replaces the initial value
                    326:      of `y' with the temporary.
                    327: 
                    328:      The default behavior (`-fno-elide-constructors') is specified by
                    329:      the draft ANSI C++ standard.  If your program's constructors have
                    330:      side effects, `-felide-constructors' can change your program's
                    331:      behavior, since some constructor calls may be omitted.
                    332: 
                    333: `-fenum-int-equiv'
                    334:      Permit implicit conversion of `int' to enumeration types.  Normally
                    335:      GNU C++ allows conversion of `enum' to `int', but not the other
                    336:      way around.
                    337: 
                    338: `-fexternal-templates'
                    339:      Produce smaller code for template declarations, by generating only
                    340:      a single copy of each template function where it is defined.  To
                    341:      use this option successfully, you must also mark all files that
                    342:      use templates with either `#pragma implementation' (the
                    343:      definition) or `#pragma interface' (declarations).  *Note
                    344:      Declarations and Definitions in One Header: C++ Interface, for more
                    345:      discussion of these pragmas.
                    346: 
                    347:      When your code is compiled with `-fexternal-templates', all
                    348:      template instantiations are external.  You must arrange for all
                    349:      necessary instantiations to appear in the implementation file; you
                    350:      can do this with a `typedef' that references each instantiation
                    351:      needed.  Conversely, when you compile using the default option
                    352:      `-fno-external-templates', all template instantiations are
                    353:      explicitly internal.
                    354: 
                    355:      You do not need to specify `-fexternal-templates' when compiling a
                    356:      file that does not define and instantiate templates used in other
                    357:      files, even if your file *uses* templates defined in other files
                    358:      that are compiled with `-fexternal-templates'.  The only side
                    359:      effect is an increase in object size for each file that you
                    360:      compile without `-fexternal-templates'.
                    361: 
                    362: `-fmemoize-lookups'
                    363: `-fsave-memoized'
                    364:      Use heuristics to compile faster.  These heuristics are not
                    365:      enabled by default, since they are only effective for certain
                    366:      input files.  Other input files compile more slowly.
                    367: 
                    368:      The first time the compiler must build a call to a member function
                    369:      (or reference to a data member), it must (1) determine whether the
                    370:      class implements member functions of that name; (2) resolve which
                    371:      member function to call (which involves figuring out what sorts of
                    372:      type conversions need to be made); and (3) check the visibility of
                    373:      the member function to the caller.  All of this adds up to slower
                    374:      compilation.  Normally, the second time a call is made to that
                    375:      member function (or reference to that data member), it must go
                    376:      through the same lengthy process again.  This means that code like
                    377:      this:
                    378: 
                    379:           cout << "This " << p << " has " << n << " legs.\n";
                    380: 
                    381:      makes six passes through all three steps.  By using a software
                    382:      cache, a "hit" significantly reduces this cost.  Unfortunately,
                    383:      using the cache introduces another layer of mechanisms which must
                    384:      be implemented, and so incurs its own overhead.
                    385:      `-fmemoize-lookups' enables the software cache.
                    386: 
                    387:      Because access privileges (visibility) to members and member
                    388:      functions may differ from one function context to the next, G++
                    389:      may need to flush the cache.  With the `-fmemoize-lookups' flag,
                    390:      the cache is flushed after every function that is compiled.  The
                    391:      `-fsave-memoized' flag enables the same software cache, but when
                    392:      the compiler determines that the context of the last function
                    393:      compiled would yield the same access privileges of the next
                    394:      function to compile, it preserves the cache.  This is most helpful
                    395:      when defining many member functions for the same class: with the
                    396:      exception of member functions which are friends of other classes,
                    397:      each member function has exactly the same access privileges as
                    398:      every other, and the cache need not be flushed.
                    399: 
                    400: `-fno-strict-prototype'
                    401:      Treat a function declaration with no arguments, such as `int foo
                    402:      ();', as C would treat it--as saying nothing about the number of
                    403:      arguments or their types.  Normally, such a declaration in C++
                    404:      means that the function `foo' takes no arguments.
                    405: 
                    406: `-fnonnull-objects'
                    407:      Assume that objects reached through references are not null.
                    408: 
                    409:      Normally, GNU C++ makes conservative assumptions about objects
                    410:      reached through references.  For example, the compiler must check
                    411:      that `a' is not null in code like the following:
                    412: 
                    413:           obj &a = g ();
                    414:           a.f (2);
                    415: 
                    416:      Checking that references of this sort have non-null values requires
                    417:      extra code, however, and it is unnecessary for many programs.  You
                    418:      can use `-fnonnull-objects' to omit the checks for null, if your
                    419:      program doesn't require checking.
                    420: 
                    421: `-fthis-is-variable'
                    422:      Permit assignment to `this'.  The incorporation of user-defined
                    423:      free store management into C++ has made assignment to `this' an
                    424:      anachronism.  Therefore, by default it is invalid to assign to
                    425:      `this' within a class member function; that is, GNU C++ treats the
                    426:      type of `this' in a member function of class `X' to be `X *const'.
                    427:      However, for backwards compatibility, you can make it valid with
                    428:      `-fthis-is-variable'.
                    429: 
                    430: `-nostdinc++'
                    431:      Do not search for header files in the standard directories
                    432:      specific to C++, but do still search the other standard
                    433:      directories.  (This option is used when building libg++.)
                    434: 
                    435: `-traditional'
                    436:      For C++ programs (in addition to the effects that apply to both C
                    437:      and C++), this has the same effect as `-fthis-is-variable'.  *Note
                    438:      Options Controlling C Dialect: C Dialect Options.
                    439: 
                    440:    In addition, these optimization, warning, and code generation options
                    441: have meanings only for C++ programs:
                    442: 
                    443: `-fno-default-inline'
                    444:      Do not assume `inline' for functions defined inside a class scope.
                    445:      *Note Options That Control Optimization: Optimize Options.
                    446: 
                    447: `-Wenum-clash'
                    448: `-Woverloaded-virtual'
                    449: `-Wtemplate-debugging'
                    450:      Warnings that apply only to C++ programs.  *Note Options to
                    451:      Request or Suppress Warnings: Warning Options.
                    452: 
                    453: `+eN'
                    454:      Control how virtual function definitions are used, in a fashion
                    455:      compatible with `cfront' 1.x.  *Note Options for Code Generation
                    456:      Conventions: Code Gen Options.
                    457: 
                    458: 
                    459: File: gcc.info,  Node: Warning Options,  Next: Debugging Options,  Prev: C++ Dialect Options,  Up: Invoking GCC
                    460: 
                    461: Options to Request or Suppress Warnings
                    462: =======================================
                    463: 
                    464:    Warnings are diagnostic messages that report constructions which are
                    465: not inherently erroneous but which are risky or suggest there may have
                    466: been an error.
                    467: 
                    468:    You can request many specific warnings with options beginning `-W',
                    469: for example `-Wimplicit' to request warnings on implicit declarations.
                    470: Each of these specific warning options also has a negative form
                    471: beginning `-Wno-' to turn off warnings; for example, `-Wno-implicit'.
                    472: This manual lists only one of the two forms, whichever is not the
                    473: default.
                    474: 
                    475:    These options control the amount and kinds of warnings produced by
                    476: GNU CC:
                    477: 
                    478: `-fsyntax-only'
                    479:      Check the code for syntax errors, but don't do anything beyond
                    480:      that.
                    481: 
                    482: `-w'
                    483:      Inhibit all warning messages.
                    484: 
                    485: `-Wno-import'
                    486:      Inhibit warning messages about the use of `#import'.
                    487: 
                    488: `-pedantic'
                    489:      Issue all the warnings demanded by strict ANSI standard C; reject
                    490:      all programs that use forbidden extensions.
                    491: 
                    492:      Valid ANSI standard C programs should compile properly with or
                    493:      without this option (though a rare few will require `-ansi').
                    494:      However, without this option, certain GNU extensions and
                    495:      traditional C features are supported as well.  With this option,
                    496:      they are rejected.
                    497: 
                    498:      `-pedantic' does not cause warning messages for use of the
                    499:      alternate keywords whose names begin and end with `__'.  Pedantic
                    500:      warnings are also disabled in the expression that follows
                    501:      `__extension__'.  However, only system header files should use
                    502:      these escape routes; application programs should avoid them.
                    503:      *Note Alternate Keywords::.
                    504: 
                    505:      This option is not intended to be useful; it exists only to satisfy
                    506:      pedants who would otherwise claim that GNU CC fails to support the
                    507:      ANSI standard.
                    508: 
                    509:      Some users try to use `-pedantic' to check programs for strict ANSI
                    510:      C conformance.  They soon find that it does not do quite what they
                    511:      want: it finds some non-ANSI practices, but not all--only those
                    512:      for which ANSI C *requires* a diagnostic.
                    513: 
                    514:      A feature to report any failure to conform to ANSI C might be
                    515:      useful in some instances, but would require considerable
                    516:      additional work and would be quite different from `-pedantic'.  We
                    517:      recommend, rather, that users take advantage of the extensions of
                    518:      GNU C and disregard the limitations of other compilers.  Aside
                    519:      from certain supercomputers and obsolete small machines, there is
                    520:      less and less reason ever to use any other C compiler other than
                    521:      for bootstrapping GNU CC.
                    522: 
                    523: `-pedantic-errors'
                    524:      Like `-pedantic', except that errors are produced rather than
                    525:      warnings.
                    526: 
                    527: `-W'
                    528:      Print extra warning messages for these events:
                    529: 
                    530:         * A nonvolatile automatic variable might be changed by a call to
                    531:           `longjmp'.  These warnings as well are possible only in
                    532:           optimizing compilation.
                    533: 
                    534:           The compiler sees only the calls to `setjmp'.  It cannot know
                    535:           where `longjmp' will be called; in fact, a signal handler
                    536:           could call it at any point in the code.  As a result, you may
                    537:           get a warning even when there is in fact no problem because
                    538:           `longjmp' cannot in fact be called at the place which would
                    539:           cause a problem.
                    540: 
                    541:         * A function can return either with or without a value.
                    542:           (Falling off the end of the function body is considered
                    543:           returning without a value.)  For example, this function would
                    544:           evoke such a warning:
                    545: 
                    546:                foo (a)
                    547:                {
                    548:                  if (a > 0)
                    549:                    return a;
                    550:                }
                    551: 
                    552:         * An expression-statement contains no side effects.
                    553: 
                    554:         * An unsigned value is compared against zero with `>' or `<='.
                    555: 
                    556:         * A comparison like `x<=y<=z' appears; this is equivalent to
                    557:           `(x<=y ? 1 : 0) <= z', which is a different interpretation
                    558:           from that of ordinary mathematical notation.
                    559: 
                    560:         * Storage-class specifiers like `static' are not the first
                    561:           things in a declaration.  According to the C Standard, this
                    562:           usage is obsolescent.
                    563: 
                    564:         * An aggregate has a partly bracketed initializer.  For
                    565:           example, the following code would evoke such a warning,
                    566:           because braces are missing around the initializer for `x.h':
                    567: 
                    568:                struct s { int f, g; };
                    569:                struct t { struct s h; int i; };
                    570:                struct t x = { 1, 2, 3 };
                    571: 
                    572: `-Wimplicit'
                    573:      Warn whenever a function or parameter is implicitly declared.
                    574: 
                    575: `-Wreturn-type'
                    576:      Warn whenever a function is defined with a return-type that
                    577:      defaults to `int'.  Also warn about any `return' statement with no
                    578:      return-value in a function whose return-type is not `void'.
                    579: 
                    580: `-Wunused'
                    581:      Warn whenever a local variable is unused aside from its
                    582:      declaration, whenever a function is declared static but never
                    583:      defined, and whenever a statement computes a result that is
                    584:      explicitly not used.
                    585: 
                    586:      If you want to prevent a warning for a particular variable, you
                    587:      can use this macro:
                    588: 
                    589:           #define USE(var) \
                    590:             static void * use_##var = (&use_##var, (void *) &var)
                    591:           
                    592:           USE (string);
                    593: 
                    594: `-Wswitch'
                    595:      Warn whenever a `switch' statement has an index of enumeral type
                    596:      and lacks a `case' for one or more of the named codes of that
                    597:      enumeration.  (The presence of a `default' label prevents this
                    598:      warning.)  `case' labels outside the enumeration range also
                    599:      provoke warnings when this option is used.
                    600: 
                    601: `-Wcomment'
                    602:      Warn whenever a comment-start sequence `/*' appears in a comment.
                    603: 
                    604: `-Wtrigraphs'
                    605:      Warn if any trigraphs are encountered (assuming they are enabled).
                    606: 
                    607: `-Wformat'
                    608:      Check calls to `printf' and `scanf', etc., to make sure that the
                    609:      arguments supplied have types appropriate to the format string
                    610:      specified.
                    611: 
                    612: `-Wchar-subscripts'
                    613:      Warn if an array subscript has type `char'.  This is a common cause
                    614:      of error, as programmers often forget that this type is signed on
                    615:      some machines.
                    616: 
                    617: `-Wuninitialized'
                    618:      An automatic variable is used without first being initialized.
                    619: 
                    620:      These warnings are possible only in optimizing compilation,
                    621:      because they require data flow information that is computed only
                    622:      when optimizing.  If you don't specify `-O', you simply won't get
                    623:      these warnings.
                    624: 
                    625:      These warnings occur only for variables that are candidates for
                    626:      register allocation.  Therefore, they do not occur for a variable
                    627:      that is declared `volatile', or whose address is taken, or whose
                    628:      size is other than 1, 2, 4 or 8 bytes.  Also, they do not occur for
                    629:      structures, unions or arrays, even when they are in registers.
                    630: 
                    631:      Note that there may be no warning about a variable that is used
                    632:      only to compute a value that itself is never used, because such
                    633:      computations may be deleted by data flow analysis before the
                    634:      warnings are printed.
                    635: 
                    636:      These warnings are made optional because GNU CC is not smart
                    637:      enough to see all the reasons why the code might be correct
                    638:      despite appearing to have an error.  Here is one example of how
                    639:      this can happen:
                    640: 
                    641:           {
                    642:             int x;
                    643:             switch (y)
                    644:               {
                    645:               case 1: x = 1;
                    646:                 break;
                    647:               case 2: x = 4;
                    648:                 break;
                    649:               case 3: x = 5;
                    650:               }
                    651:             foo (x);
                    652:           }
                    653: 
                    654:      If the value of `y' is always 1, 2 or 3, then `x' is always
                    655:      initialized, but GNU CC doesn't know this.  Here is another common
                    656:      case:
                    657: 
                    658:           {
                    659:             int save_y;
                    660:             if (change_y) save_y = y, y = new_y;
                    661:             ...
                    662:             if (change_y) y = save_y;
                    663:           }
                    664: 
                    665:      This has no bug because `save_y' is used only if it is set.
                    666: 
                    667:      Some spurious warnings can be avoided if you declare all the
                    668:      functions you use that never return as `volatile'.  *Note Function
                    669:      Attributes::.
                    670: 
                    671: `-Wparentheses'
                    672:      Warn if parentheses are omitted in certain contexts, such as when
                    673:      there is an assignment in a context where a truth value is
                    674:      expected, or when operators are nested whose precedence people
                    675:      often get confused about.
                    676: 
                    677: `-Wenum-clash'
                    678:      Warn about conversion between different enumeration types.  (C++
                    679:      only).
                    680: 
                    681: `-Wtemplate-debugging'
                    682:      When using templates in a C++ program, warn if debugging is not yet
                    683:      fully available (C++ only).
                    684: 
                    685: `-Wall'
                    686:      All of the above `-W' options combined.  These are all the options
                    687:      which pertain to usage that we recommend avoiding and that we
                    688:      believe is easy to avoid, even in conjunction with macros.
                    689: 
                    690:    The remaining `-W...' options are not implied by `-Wall' because
                    691: they warn about constructions that we consider reasonable to use, on
                    692: occasion, in clean programs.
                    693: 
                    694: `-Wtraditional'
                    695:      Warn about certain constructs that behave differently in
                    696:      traditional and ANSI C.
                    697: 
                    698:         * Macro arguments occurring within string constants in the
                    699:           macro body.  These would substitute the argument in
                    700:           traditional C, but are part of the constant in ANSI C.
                    701: 
                    702:         * A function declared external in one block and then used after
                    703:           the end of the block.
                    704: 
                    705:         * A `switch' statement has an operand of type `long'.
                    706: 
                    707: `-Wshadow'
                    708:      Warn whenever a local variable shadows another local variable.
                    709: 
                    710: `-Wid-clash-LEN'
                    711:      Warn whenever two distinct identifiers match in the first LEN
                    712:      characters.  This may help you prepare a program that will compile
                    713:      with certain obsolete, brain-damaged compilers.
                    714: 
                    715: `-Wpointer-arith'
                    716:      Warn about anything that depends on the "size of" a function type
                    717:      or of `void'.  GNU C assigns these types a size of 1, for
                    718:      convenience in calculations with `void *' pointers and pointers to
                    719:      functions.
                    720: 
                    721: `-Wcast-qual'
                    722:      Warn whenever a pointer is cast so as to remove a type qualifier
                    723:      from the target type.  For example, warn if a `const char *' is
                    724:      cast to an ordinary `char *'.
                    725: 
                    726: `-Wcast-align'
                    727:      Warn whenever a pointer is cast such that the required alignment
                    728:      of the target is increased.  For example, warn if a `char *' is
                    729:      cast to an `int *' on machines where integers can only be accessed
                    730:      at two- or four-byte boundaries.
                    731: 
                    732: `-Wwrite-strings'
                    733:      Give string constants the type `const char[LENGTH]' so that
                    734:      copying the address of one into a non-`const' `char *' pointer
                    735:      will get a warning.  These warnings will help you find at compile
                    736:      time code that can try to write into a string constant, but only
                    737:      if you have been very careful about using `const' in declarations
                    738:      and prototypes.  Otherwise, it will just be a nuisance; this is
                    739:      why we did not make `-Wall' request these warnings.
                    740: 
                    741: `-Wconversion'
                    742:      Warn if a prototype causes a type conversion that is different
                    743:      from what would happen to the same argument in the absence of a
                    744:      prototype.  This includes conversions of fixed point to floating
                    745:      and vice versa, and conversions changing the width or signedness
                    746:      of a fixed point argument except when the same as the default
                    747:      promotion.
                    748: 
                    749:      Also, warn if a negative integer constant expression is implicitly
                    750:      converted to an unsigned type.  For example, warn about the
                    751:      assignment `x = -1' if `x' is unsigned.  But do not warn about
                    752:      explicit casts like `(unsigned) -1'.
                    753: 
                    754: `-Waggregate-return'
                    755:      Warn if any functions that return structures or unions are defined
                    756:      or called.  (In languages where you can return an array, this also
                    757:      elicits a warning.)
                    758: 
                    759: `-Wstrict-prototypes'
                    760:      Warn if a function is declared or defined without specifying the
                    761:      argument types.  (An old-style function definition is permitted
                    762:      without a warning if preceded by a declaration which specifies the
                    763:      argument types.)
                    764: 
                    765: `-Wmissing-prototypes'
                    766:      Warn if a global function is defined without a previous prototype
                    767:      declaration.  This warning is issued even if the definition itself
                    768:      provides a prototype.  The aim is to detect global functions that
                    769:      fail to be declared in header files.
                    770: 
                    771: `-Wredundant-decls'
                    772:      Warn if anything is declared more than once in the same scope,
                    773:      even in cases where multiple declaration is valid and changes
                    774:      nothing.
                    775: 
                    776: `-Wnested-externs'
                    777:      Warn if an `extern' declaration is encountered within an function.
                    778: 
                    779: `-Winline'
                    780:      Warn if a function can not be inlined, and either it was declared
                    781:      as inline, or else the `-finline-functions' option was given.
                    782: 
                    783: `-Woverloaded-virtual'
                    784:      Warn when a derived class function declaration may be an error in
                    785:      defining a virtual function (C++ only).  In a derived class, the
                    786:      definitions of virtual functions must match the type signature of a
                    787:      virtual function declared in the base class.  With this option, the
                    788:      compiler warns when you define a function with the same name as a
                    789:      virtual function, but with a type signature that does not match any
                    790:      declarations from the base class.
                    791: 
                    792: `-Werror'
                    793:      Make all warnings into errors.
                    794: 
                    795: 
                    796: File: gcc.info,  Node: Debugging Options,  Next: Optimize Options,  Prev: Warning Options,  Up: Invoking GCC
                    797: 
                    798: Options for Debugging Your Program or GNU CC
                    799: ============================================
                    800: 
                    801:    GNU CC has various special options that are used for debugging
                    802: either your program or GCC:
                    803: 
                    804: `-g'
                    805:      Produce debugging information in the operating system's native
                    806:      format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
                    807:      debugging information.
                    808: 
                    809:      On most systems that use stabs format, `-g' enables use of extra
                    810:      debugging information that only GDB can use; this extra information
                    811:      makes debugging work better in GDB but will probably make other
                    812:      debuggers crash or refuse to read the program.  If you want to
                    813:      control for certain whether to generate the extra information, use
                    814:      `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff', `-gdwarf+', or
                    815:      `-gdwarf' (see below).
                    816: 
                    817:      Unlike most other C compilers, GNU CC allows you to use `-g' with
                    818:      `-O'.  The shortcuts taken by optimized code may occasionally
                    819:      produce surprising results: some variables you declared may not
                    820:      exist at all; flow of control may briefly move where you did not
                    821:      expect it; some statements may not be executed because they
                    822:      compute constant results or their values were already at hand;
                    823:      some statements may execute in different places because they were
                    824:      moved out of loops.
                    825: 
                    826:      Nevertheless it proves possible to debug optimized output.  This
                    827:      makes it reasonable to use the optimizer for programs that might
                    828:      have bugs.
                    829: 
                    830:      The following options are useful when GNU CC is generated with the
                    831:      capability for more than one debugging format.
                    832: 
                    833: `-ggdb'
                    834:      Produce debugging information in the native format (if that is
                    835:      supported), including GDB extensions if at all possible.
                    836: 
                    837: `-gstabs'
                    838:      Produce debugging information in stabs format (if that is
                    839:      supported), without GDB extensions.  This is the format used by
                    840:      DBX on most BSD systems.  On MIPS and Alpha systems this option
                    841:      produces embedded stabs debugging output which is not understood
                    842:      by DBX.
                    843: 
                    844: `-gstabs+'
                    845:      Produce debugging information in stabs format (if that is
                    846:      supported), using GNU extensions understood only by the GNU
                    847:      debugger (GDB).  The use of these extensions is likely to make
                    848:      other debuggers crash or refuse to read the program.
                    849: 
                    850: `-gcoff'
                    851:      Produce debugging information in COFF format (if that is
                    852:      supported).  This is the format used by SDB on most System V
                    853:      systems prior to System V Release 4.
                    854: 
                    855: `-gxcoff'
                    856:      Produce debugging information in XCOFF format (if that is
                    857:      supported).  This is the format used by the DBX debugger on IBM
                    858:      RS/6000 systems.
                    859: 
                    860: `-gxcoff+'
                    861:      Produce debugging information in XCOFF format (if that is
                    862:      supported), using GNU extensions understood only by the GNU
                    863:      debugger (GDB).  The use of these extensions is likely to make
                    864:      other debuggers crash or refuse to read the program.
                    865: 
                    866: `-gdwarf'
                    867:      Produce debugging information in DWARF format (if that is
                    868:      supported).  This is the format used by SDB on most System V
                    869:      Release 4 systems.
                    870: 
                    871: `-gdwarf+'
                    872:      Produce debugging information in DWARF format (if that is
                    873:      supported), using GNU extensions understood only by the GNU
                    874:      debugger (GDB).  The use of these extensions is likely to make
                    875:      other debuggers crash or refuse to read the program.
                    876: 
                    877: `-gLEVEL'
                    878: `-ggdbLEVEL'
                    879: `-gstabsLEVEL'
                    880: `-gcoffLEVEL'
                    881: `-gxcoffLEVEL'
                    882: `-gdwarfLEVEL'
                    883:      Request debugging information and also use LEVEL to specify how
                    884:      much information.  The default level is 2.
                    885: 
                    886:      Level 1 produces minimal information, enough for making backtraces
                    887:      in parts of the program that you don't plan to debug.  This
                    888:      includes descriptions of functions and external variables, but no
                    889:      information about local variables and no line numbers.
                    890: 
                    891:      Level 3 includes extra information, such as all the macro
                    892:      definitions present in the program.  Some debuggers support macro
                    893:      expansion when you use `-g3'.
                    894: 
                    895: `-p'
                    896:      Generate extra code to write profile information suitable for the
                    897:      analysis program `prof'.  You must use this option when compiling
                    898:      the source files you want data about, and you must also use it when
                    899:      linking.
                    900: 
                    901: `-pg'
                    902:      Generate extra code to write profile information suitable for the
                    903:      analysis program `gprof'.  You must use this option when compiling
                    904:      the source files you want data about, and you must also use it when
                    905:      linking.
                    906: 
                    907: `-a'
                    908:      Generate extra code to write profile information for basic blocks,
                    909:      which will record the number of times each basic block is
                    910:      executed, the basic block start address, and the function name
                    911:      containing the basic block.  If `-g' is used, the line number and
                    912:      filename of the start of the basic block will also be recorded.
                    913:      If not overridden by the machine description, the default action is
                    914:      to append to the text file `bb.out'.
                    915: 
                    916:      This data could be analyzed by a program like `tcov'.  Note,
                    917:      however, that the format of the data is not what `tcov' expects.
                    918:      Eventually GNU `gprof' should be extended to process this data.
                    919: 
                    920: `-dLETTERS'
                    921:      Says to make debugging dumps during compilation at times specified
                    922:      by LETTERS.  This is used for debugging the compiler.  The file
                    923:      names for most of the dumps are made by appending a word to the
                    924:      source file name (e.g.  `foo.c.rtl' or `foo.c.jump').  Here are the
                    925:      possible letters for use in LETTERS, and their meanings:
                    926: 
                    927:     `M'
                    928:           Dump all macro definitions, at the end of preprocessing, and
                    929:           write no output.
                    930: 
                    931:     `N'
                    932:           Dump all macro names, at the end of preprocessing.
                    933: 
                    934:     `D'
                    935:           Dump all macro definitions, at the end of preprocessing, in
                    936:           addition to normal output.
                    937: 
                    938:     `y'
                    939:           Dump debugging information during parsing, to standard error.
                    940: 
                    941:     `r'
                    942:           Dump after RTL generation, to `FILE.rtl'.
                    943: 
                    944:     `x'
                    945:           Just generate RTL for a function instead of compiling it.
                    946:           Usually used with `r'.
                    947: 
                    948:     `j'
                    949:           Dump after first jump optimization, to `FILE.jump'.
                    950: 
                    951:     `s'
                    952:           Dump after CSE (including the jump optimization that sometimes
                    953:           follows CSE), to `FILE.cse'.
                    954: 
                    955:     `L'
                    956:           Dump after loop optimization, to `FILE.loop'.
                    957: 
                    958:     `t'
                    959:           Dump after the second CSE pass (including the jump
                    960:           optimization that sometimes follows CSE), to `FILE.cse2'.
                    961: 
                    962:     `f'
                    963:           Dump after flow analysis, to `FILE.flow'.
                    964: 
                    965:     `c'
                    966:           Dump after instruction combination, to the file
                    967:           `FILE.combine'.
                    968: 
                    969:     `S'
                    970:           Dump after the first instruction scheduling pass, to
                    971:           `FILE.sched'.
                    972: 
                    973:     `l'
                    974:           Dump after local register allocation, to `FILE.lreg'.
                    975: 
                    976:     `g'
                    977:           Dump after global register allocation, to `FILE.greg'.
                    978: 
                    979:     `R'
                    980:           Dump after the second instruction scheduling pass, to
                    981:           `FILE.sched2'.
                    982: 
                    983:     `J'
                    984:           Dump after last jump optimization, to `FILE.jump2'.
                    985: 
                    986:     `d'
                    987:           Dump after delayed branch scheduling, to `FILE.dbr'.
                    988: 
                    989:     `k'
                    990:           Dump after conversion from registers to stack, to
                    991:           `FILE.stack'.
                    992: 
                    993:     `a'
                    994:           Produce all the dumps listed above.
                    995: 
                    996:     `m'
                    997:           Print statistics on memory usage, at the end of the run, to
                    998:           standard error.
                    999: 
                   1000:     `p'
                   1001:           Annotate the assembler output with a comment indicating which
                   1002:           pattern and alternative was used.
                   1003: 
                   1004: `-fpretend-float'
                   1005:      When running a cross-compiler, pretend that the target machine
                   1006:      uses the same floating point format as the host machine.  This
                   1007:      causes incorrect output of the actual floating constants, but the
                   1008:      actual instruction sequence will probably be the same as GNU CC
                   1009:      would make when running on the target machine.
                   1010: 
                   1011: `-save-temps'
                   1012:      Store the usual "temporary" intermediate files permanently; place
                   1013:      them in the current directory and name them based on the source
                   1014:      file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
                   1015:      files `foo.i' and `foo.s', as well as `foo.o'.
                   1016: 
                   1017: `-print-libgcc-file-name'
                   1018:      Print the full absolute name of the library file `libgcc.a' that
                   1019:      would be used when linking--and don't do anything else.  With this
                   1020:      option, GNU CC does not compile or link anything; it just prints
                   1021:      the file name.
                   1022: 
                   1023:      This is useful when you use `-nostdlib' but you do want to link
                   1024:      with `libgcc.a'.  You can do
                   1025: 
                   1026:           gcc -nostdlib FILES... `gcc -print-libgcc-file-name`
                   1027: 

unix.superglobalmegacorp.com

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