|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.