|
|
1.1.1.7 root 1: This is Info file gcc.info, produced by Makeinfo-1.55 from the input
1.1 root 2: file gcc.texi.
3:
4: This file documents the use and the internals of the GNU compiler.
5:
1.1.1.8 ! root 6: Published by the Free Software Foundation 59 Temple Place - Suite 330
! 7: Boston, MA 02111-1307 USA
1.1.1.5 root 8:
1.1.1.8 ! root 9: Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software
! 10: Foundation, Inc.
1.1 root 11:
1.1.1.3 root 12: Permission is granted to make and distribute verbatim copies of this
13: manual provided the copyright notice and this permission notice are
14: preserved on all copies.
1.1 root 15:
16: Permission is granted to copy and distribute modified versions of
17: this manual under the conditions for verbatim copying, provided also
1.1.1.7 root 18: that the sections entitled "GNU General Public License," "Funding for
19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are
20: included exactly as in the original, and provided that the entire
21: resulting derived work is distributed under the terms of a permission
22: notice identical to this one.
1.1 root 23:
24: Permission is granted to copy and distribute translations of this
25: manual into another language, under the above conditions for modified
1.1.1.3 root 26: versions, except that the sections entitled "GNU General Public
1.1.1.7 root 27: License," "Funding for Free Software," and "Protect Your Freedom--Fight
28: `Look And Feel'", and this permission notice, may be included in
29: translations approved by the Free Software Foundation instead of in the
30: original English.
31:
32:
33: File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC
34:
35: Option Summary
36: ==============
37:
38: Here is a summary of all the options, grouped by type. Explanations
39: are in the following sections.
40:
41: *Overall Options*
42: *Note Options Controlling the Kind of Output: Overall Options.
43: -c -S -E -o FILE -pipe -v -x LANGUAGE
44:
45: *C Language Options*
46: *Note Options Controlling C Dialect: C Dialect Options.
47: -ansi -fallow-single-precision -fcond-mismatch -fno-asm
48: -fno-builtin -fsigned-bitfields -fsigned-char
49: -funsigned-bitfields -funsigned-char -fwritable-strings
50: -traditional -traditional-cpp -trigraphs
51:
52: *C++ Language Options*
53: *Note Options Controlling C++ Dialect: C++ Dialect Options.
54: -fall-virtual -fdollars-in-identifiers -felide-constructors
1.1.1.8 ! root 55: -fenum-int-equiv -fexternal-templates -ffor-scope -fno-for-scope
! 56: -fhandle-signatures -fmemoize-lookups -fno-default-inline -fno-gnu-keywords
! 57: -fnonnull-objects -foperator-names -fstrict-prototype
! 58: -fthis-is-variable -nostdinc++ -traditional +eN
1.1.1.7 root 59:
60: *Warning Options*
61: *Note Options to Request or Suppress Warnings: Warning Options.
62: -fsyntax-only -pedantic -pedantic-errors
63: -w -W -Wall -Waggregate-return -Wbad-function-cast
64: -Wcast-align -Wcast-qual -Wchar-subscript -Wcomment
65: -Wconversion -Wenum-clash -Werror -Wformat
66: -Wid-clash-LEN -Wimplicit -Wimport -Winline
67: -Wlarger-than-LEN -Wmissing-declarations
68: -Wmissing-prototypes -Wnested-externs
69: -Wno-import -Woverloaded-virtual -Wparentheses
70: -Wpointer-arith -Wredundant-decls -Wreorder -Wreturn-type -Wshadow
71: -Wstrict-prototypes -Wswitch -Wsynth -Wtemplate-debugging
72: -Wtraditional -Wtrigraphs -Wuninitialized -Wunused
73: -Wwrite-strings
74:
75: *Debugging Options*
76: *Note Options for Debugging Your Program or GCC: Debugging Options.
77: -a -dLETTERS -fpretend-float
78: -g -gLEVEL -gcoff -gdwarf -gdwarf+
79: -ggdb -gstabs -gstabs+ -gxcoff -gxcoff+
80: -p -pg -print-file-name=LIBRARY -print-libgcc-file-name
1.1.1.8 ! root 81: -print-prog-name=PROGRAM -print-search-dirs -save-temps
1.1.1.7 root 82:
83: *Optimization Options*
84: *Note Options that Control Optimization: Optimize Options.
85: -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
86: -fdelayed-branch -fexpensive-optimizations
87: -ffast-math -ffloat-store -fforce-addr -fforce-mem
88: -finline-functions -fkeep-inline-functions
89: -fno-default-inline -fno-defer-pop -fno-function-cse
90: -fno-inline -fno-peephole -fomit-frame-pointer
91: -frerun-cse-after-loop -fschedule-insns
92: -fschedule-insns2 -fstrength-reduce -fthread-jumps
93: -funroll-all-loops -funroll-loops
94: -O -O0 -O1 -O2 -O3
95:
96: *Preprocessor Options*
97: *Note Options Controlling the Preprocessor: Preprocessor Options.
98: -AQUESTION(ANSWER) -C -dD -dM -dN
99: -DMACRO[=DEFN] -E -H
100: -idirafter DIR
101: -include FILE -imacros FILE
102: -iprefix FILE -iwithprefix DIR
103: -iwithprefixbefore DIR -isystem DIR
104: -M -MD -MM -MMD -MG -nostdinc -P -trigraphs
105: -undef -UMACRO -Wp,OPTION
106:
107: *Assembler Option*
108: *Note Passing Options to the Assembler: Assembler Options.
109: -Wa,OPTION
110:
111: *Linker Options*
112: *Note Options for Linking: Link Options.
1.1.1.8 ! root 113: OBJECT-FILE-NAME -lLIBRARY
! 114: -nostartfiles -nodefaultlibs -nostdlib
1.1.1.7 root 115: -s -static -shared -symbolic
116: -Wl,OPTION -Xlinker OPTION
117: -u SYMBOL
118:
119: *Directory Options*
120: *Note Options for Directory Search: Directory Options.
121: -BPREFIX -IDIR -I- -LDIR
122:
123: *Target Options*
124: *Note Target Options::.
125: -b MACHINE -V VERSION
126:
127: *Machine Dependent Options*
128: *Note Hardware Models and Configurations: Submodel Options.
129: *M680x0 Options*
130: -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
131: -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
132: -mrtd -mshort -msoft-float
133:
134: *VAX Options*
135: -mg -mgnu -munix
136:
137: *SPARC Options*
138: -mapp-regs -mcypress -mepilogue -mflat -mfpu -mhard-float
139: -mhard-quad-float -mno-app-regs -mno-flat -mno-fpu
140: -mno-epilogue -mno-unaligned-doubles
141: -msoft-float -msoft-quad-float
142: -msparclite -msupersparc -munaligned-doubles -mv8
143:
144: SPARC V9 compilers support the following options
145: in addition to the above:
146:
147: -mmedlow -mmedany
148: -mint32 -mint64 -mlong32 -mlong64
149: -mno-stack-bias -mstack-bias
150:
151: *Convex Options*
152: -mc1 -mc2 -mc32 -mc34 -mc38
153: -margcount -mnoargcount
154: -mlong32 -mlong64
155: -mvolatile-cache -mvolatile-nocache
156:
157: *AMD29K Options*
158: -m29000 -m29050 -mbw -mnbw -mdw -mndw
159: -mlarge -mnormal -msmall
160: -mkernel-registers -mno-reuse-arg-regs
161: -mno-stack-check -mno-storem-bug
162: -mreuse-arg-regs -msoft-float -mstack-check
163: -mstorem-bug -muser-registers
164:
165: *ARM Options*
166: -mapcs -m2 -m3 -m6 -mbsd -mxopen -mno-symrename
167:
168: *M88K Options*
169: -m88000 -m88100 -m88110 -mbig-pic
170: -mcheck-zero-division -mhandle-large-shift
171: -midentify-revision -mno-check-zero-division
172: -mno-ocs-debug-info -mno-ocs-frame-position
173: -mno-optimize-arg-area -mno-serialize-volatile
174: -mno-underscores -mocs-debug-info
175: -mocs-frame-position -moptimize-arg-area
176: -mserialize-volatile -mshort-data-NUM -msvr3
177: -msvr4 -mtrap-large-shift -muse-div-instruction
178: -mversion-03.00 -mwarn-passed-structs
179:
1.1.1.8 ! root 180: *RS/6000 and PowerPC Options*
! 181: -mcpu=CPU TYPE
! 182: -mpower -mno-power -mpower2 -mno-power2
! 183: -mpowerpc -mno-powerpc
! 184: -mpowerpc-gpopt -mno-powerpc-gpopt
! 185: -mpowerpc-gfxopt -mno-powerpc-gfxopt
! 186: -mnew-mnemonics -mno-new-mnemonics
1.1.1.7 root 187: -mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc
1.1.1.8 ! root 188: -msoft-float -mhard-float -mmultiple -mno-multiple
! 189: -mstring -mno-string -mbit-align -mno-bit-align
! 190: -mstrict-align -mno-strict-align -mrelocatable -mno-relocatable
! 191: -mtoc -mno-toc -mtraceback -mno-traceback
! 192: -mlittle -mlittle-endian -mbig -mbig-endian
! 193: -mcall-aix -mcall-sysv -mprototype
1.1.1.7 root 194:
195: *RT Options*
196: -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
197: -mfull-fp-blocks -mhc-struct-return -min-line-mul
198: -mminimum-fp-blocks -mnohc-struct-return
199:
200: *MIPS Options*
201: -mabicalls -mcpu=CPU TYPE -membedded-data
202: -membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64
203: -mgpopt -mhalf-pic -mhard-float -mint64 -mips1
204: -mips2 -mips3 -mlong64 -mlong-calls -mmemcpy
205: -mmips-as -mmips-tfile -mno-abicalls
206: -mno-embedded-data -mno-embedded-pic
207: -mno-gpopt -mno-long-calls
208: -mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats
209: -mrnames -msoft-float
1.1.1.8 ! root 210: -m4650 -msingle-float -mmad
! 211: -mstats -EL -EB -G NUM -nocpp
1.1.1.7 root 212:
213: *i386 Options*
1.1.1.8 ! root 214: -m486 -m386 -mieee-fp -mno-fancy-math-387
1.1.1.7 root 215: -mno-fp-ret-in-387 -msoft-float -msvr3-shlib
1.1.1.8 ! root 216: -mno-wide-multiply -mrtd -malign-double
! 217: -mreg-alloc=LIST -mregparm=NUM
! 218: -malign-jumps=NUM -malign-loops=NUM
! 219: -malign-functions=NUM
1.1.1.7 root 220:
221: *HPPA Options*
1.1.1.8 ! root 222: -mdisable-fpregs -mdisable-indexing -mfast-indirect-calls
! 223: -mgas -mjump-in-delay -mlong-millicode-calls -mno-disable-fpregs
! 224: -mno-disable-indexing -mno-fast-indirect-calls -mno-gas
! 225: -mno-jump-in-delay -mno-millicode-long-calls
! 226: -mno-portable-runtime -mno-soft-float -msoft-float
! 227: -mpa-risc-1-0 -mpa-risc-1-1 -mportable-runtime -mschedule=LIST
1.1.1.7 root 228:
229: *Intel 960 Options*
230: -mCPU TYPE -masm-compat -mclean-linkage
231: -mcode-align -mcomplex-addr -mleaf-procedures
232: -mic-compat -mic2.0-compat -mic3.0-compat
233: -mintel-asm -mno-clean-linkage -mno-code-align
234: -mno-complex-addr -mno-leaf-procedures
235: -mno-old-align -mno-strict-align -mno-tail-call
236: -mnumerics -mold-align -msoft-float -mstrict-align
237: -mtail-call
238:
239: *DEC Alpha Options*
240: -mfp-regs -mno-fp-regs -mno-soft-float
241: -msoft-float
242:
243: *Clipper Options*
244: -mc300 -mc400
245:
246: *H8/300 Options*
247: -mrelax -mh
248:
249: *System V Options*
250: -Qy -Qn -YP,PATHS -Ym,DIR
251:
252: *Code Generation Options*
253: *Note Options for Code Generation Conventions: Code Gen Options.
254: -fcall-saved-REG -fcall-used-REG
255: -ffixed-REG -finhibit-size-directive
256: -fno-common -fno-ident -fno-gnu-linker
257: -fpcc-struct-return -fpic -fPIC
258: -freg-struct-return -fshared-data -fshort-enums
259: -fshort-double -fvolatile -fvolatile-global
1.1.1.8 ! root 260: -fverbose-asm -fpack-struct +e0 +e1
1.1.1.7 root 261:
262: * Menu:
263:
264: * Overall Options:: Controlling the kind of output:
265: an executable, object files, assembler files,
266: or preprocessed source.
267: * C Dialect Options:: Controlling the variant of C language compiled.
268: * C++ Dialect Options:: Variations on C++.
269: * Warning Options:: How picky should the compiler be?
270: * Debugging Options:: Symbol tables, measurements, and debugging dumps.
271: * Optimize Options:: How much optimization?
272: * Preprocessor Options:: Controlling header files and macro definitions.
273: Also, getting dependency information for Make.
274: * Assembler Options:: Passing options to the assembler.
275: * Link Options:: Specifying libraries and so on.
276: * Directory Options:: Where to find header files and libraries.
277: Where to find the compiler executable files.
278: * Target Options:: Running a cross-compiler, or an old version of GNU CC.
279:
280:
281: File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC
282:
283: Options Controlling the Kind of Output
284: ======================================
285:
286: Compilation can involve up to four stages: preprocessing, compilation
287: proper, assembly and linking, always in that order. The first three
288: stages apply to an individual source file, and end by producing an
289: object file; linking combines all the object files (those newly
290: compiled, and those specified as input) into an executable file.
291:
292: For any given input file, the file name suffix determines what kind
293: of compilation is done:
294:
295: `FILE.c'
296: C source code which must be preprocessed.
297:
298: `FILE.i'
299: C source code which should not be preprocessed.
300:
301: `FILE.ii'
302: C++ source code which should not be preprocessed.
303:
304: `FILE.m'
305: Objective-C source code. Note that you must link with the library
306: `libobjc.a' to make an Objective-C program work.
307:
308: `FILE.h'
309: C header file (not to be compiled or linked).
310:
311: `FILE.cc'
312: `FILE.cxx'
313: `FILE.cpp'
314: `FILE.C'
315: C++ source code which must be preprocessed. Note that in `.cxx',
316: the last two letters must both be literally `x'. Likewise, `.C'
317: refers to a literal capital C.
318:
319: `FILE.s'
320: Assembler code.
321:
322: `FILE.S'
323: Assembler code which must be preprocessed.
324:
325: `OTHER'
326: An object file to be fed straight into linking. Any file name
327: with no recognized suffix is treated this way.
328:
329: You can specify the input language explicitly with the `-x' option:
330:
331: `-x LANGUAGE'
332: Specify explicitly the LANGUAGE for the following input files
333: (rather than letting the compiler choose a default based on the
334: file name suffix). This option applies to all following input
335: files until the next `-x' option. Possible values for LANGUAGE
336: are:
337: c objective-c c++
338: c-header cpp-output c++-cpp-output
339: assembler assembler-with-cpp
340:
341: `-x none'
342: Turn off any specification of a language, so that subsequent files
343: are handled according to their file name suffixes (as they are if
344: `-x' has not been used at all).
345:
346: If you only want some of the stages of compilation, you can use `-x'
347: (or filename suffixes) to tell `gcc' where to start, and one of the
348: options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that
349: some combinations (for example, `-x cpp-output -E' instruct `gcc' to do
350: nothing at all.
351:
352: `-c'
353: Compile or assemble the source files, but do not link. The linking
354: stage simply is not done. The ultimate output is in the form of an
355: object file for each source file.
356:
357: By default, the object file name for a source file is made by
358: replacing the suffix `.c', `.i', `.s', etc., with `.o'.
359:
360: Unrecognized input files, not requiring compilation or assembly,
361: are ignored.
362:
363: `-S'
364: Stop after the stage of compilation proper; do not assemble. The
365: output is in the form of an assembler code file for each
366: non-assembler input file specified.
367:
368: By default, the assembler file name for a source file is made by
369: replacing the suffix `.c', `.i', etc., with `.s'.
370:
371: Input files that don't require compilation are ignored.
372:
373: `-E'
374: Stop after the preprocessing stage; do not run the compiler
375: proper. The output is in the form of preprocessed source code,
376: which is sent to the standard output.
377:
378: Input files which don't require preprocessing are ignored.
379:
380: `-o FILE'
381: Place output in file FILE. This applies regardless to whatever
382: sort of output is being produced, whether it be an executable file,
383: an object file, an assembler file or preprocessed C code.
384:
385: Since only one output file can be specified, it does not make
386: sense to use `-o' when compiling more than one input file, unless
387: you are producing an executable file as output.
388:
389: If `-o' is not specified, the default is to put an executable file
390: in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its
391: assembler file in `SOURCE.s', and all preprocessed C source on
392: standard output.
393:
394: `-v'
395: Print (on standard error output) the commands executed to run the
396: stages of compilation. Also print the version number of the
397: compiler driver program and of the preprocessor and the compiler
398: proper.
399:
400: `-pipe'
401: Use pipes rather than temporary files for communication between the
402: various stages of compilation. This fails to work on some systems
403: where the assembler is unable to read from a pipe; but the GNU
404: assembler has no trouble.
1.1.1.4 root 405:
406:
1.1.1.5 root 407: File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC
408:
409: Compiling C++ Programs
410: ======================
411:
412: C++ source files conventionally use one of the suffixes `.C', `.cc',
1.1.1.7 root 413: `cpp', or `.cxx'; preprocessed C++ files use the suffix `.ii'. GNU CC
1.1.1.5 root 414: recognizes files with these names and compiles them as C++ programs
415: even if you call the compiler the same way as for compiling C programs
416: (usually with the name `gcc').
417:
418: However, C++ programs often require class libraries as well as a
419: compiler that understands the C++ language--and under some
420: circumstances, you might want to compile programs from standard input,
421: or otherwise without a suffix that flags them as C++ programs. `g++'
1.1.1.7 root 422: is a program that calls GNU CC with the default language set to C++,
423: and automatically specifies linking against the GNU class library
1.1.1.5 root 424: libg++. (1) On many systems, the script `g++' is also installed with
425: the name `c++'.
426:
427: When you compile C++ programs, you may specify many of the same
428: command-line options that you use for compiling programs in any
429: language; or command-line options meaningful for C and related
430: languages; or options that are meaningful only for C++ programs. *Note
431: Options Controlling C Dialect: C Dialect Options, for explanations of
432: options for languages related to C. *Note Options Controlling C++
433: Dialect: C++ Dialect Options, for explanations of options that are
434: meaningful only for C++ programs.
435:
436: ---------- Footnotes ----------
437:
438: (1) Prior to release 2 of the compiler, there was a separate `g++'
439: compiler. That version was based on GNU CC, but not integrated with
440: it. Versions of `g++' with a `1.XX' version number--for example, `g++'
441: version 1.37 or 1.42--are much less reliable than the versions
442: integrated with GCC 2. Moreover, combining G++ `1.XX' with a version 2
443: GCC will simply not work.
444:
445:
446: File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC
1.1.1.4 root 447:
1.1.1.5 root 448: Options Controlling C Dialect
449: =============================
1.1.1.4 root 450:
1.1.1.5 root 451: The following options control the dialect of C (or languages derived
452: from C, such as C++ and Objective C) that the compiler accepts:
1.1.1.4 root 453:
454: `-ansi'
455: Support all ANSI standard C programs.
456:
457: This turns off certain features of GNU C that are incompatible
458: with ANSI C, such as the `asm', `inline' and `typeof' keywords, and
459: predefined macros such as `unix' and `vax' that identify the type
460: of system you are using. It also enables the undesirable and
1.1.1.8 ! root 461: rarely used ANSI trigraph feature, disallows `$' as part of
! 462: identifiers, and disables recognition of C++ style `//' comments.
1.1.1.4 root 463:
464: The alternate keywords `__asm__', `__extension__', `__inline__'
465: and `__typeof__' continue to work despite `-ansi'. You would not
1.1.1.7 root 466: want to use them in an ANSI C program, of course, but it is useful
467: to put them in header files that might be included in compilations
1.1.1.4 root 468: done with `-ansi'. Alternate predefined macros such as `__unix__'
469: and `__vax__' are also available, with or without `-ansi'.
470:
471: The `-ansi' option does not cause non-ANSI programs to be rejected
472: gratuitously. For that, `-pedantic' is required in addition to
473: `-ansi'. *Note Warning Options::.
474:
475: The macro `__STRICT_ANSI__' is predefined when the `-ansi' option
476: is used. Some header files may notice this macro and refrain from
477: declaring certain functions or defining certain macros that the
478: ANSI standard doesn't call for; this is to avoid interfering with
479: any programs that might use these names for other things.
480:
481: The functions `alloca', `abort', `exit', and `_exit' are not
482: builtin functions when `-ansi' is used.
483:
484: `-fno-asm'
1.1.1.8 ! root 485: Do not recognize `asm', `inline' or `typeof' as a keyword, so that
! 486: code can use these words as identifiers. You can use the keywords
1.1.1.5 root 487: `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies
488: `-fno-asm'.
1.1.1.4 root 489:
1.1.1.8 ! root 490: In C++, this switch only affects the `typeof' keyword, since `asm'
! 491: and `inline' are standard keywords. You may want to use the
! 492: `-fno-gnu-keywords' flag instead, as it also disables the other,
! 493: C++-specific, extension keywords such as `headof'.
! 494:
1.1.1.4 root 495: `-fno-builtin'
1.1.1.6 root 496: Don't recognize builtin functions that do not begin with two
1.1.1.5 root 497: leading underscores. Currently, the functions affected include
498: `abort', `abs', `alloca', `cos', `exit', `fabs', `ffs', `labs',
1.1.1.4 root 499: `memcmp', `memcpy', `sin', `sqrt', `strcmp', `strcpy', and
500: `strlen'.
501:
1.1.1.6 root 502: GCC normally generates special code to handle certain builtin
503: functions more efficiently; for instance, calls to `alloca' may
504: become single instructions that adjust the stack directly, and
505: calls to `memcpy' may become inline copy loops. The resulting
506: code is often both smaller and faster, but since the function
507: calls no longer appear as such, you cannot set a breakpoint on
508: those calls, nor can you change the behavior of the functions by
509: linking with a different library.
510:
1.1.1.5 root 511: The `-ansi' option prevents `alloca' and `ffs' from being builtin
512: functions, since these functions do not have an ANSI standard
513: meaning.
1.1.1.4 root 514:
515: `-trigraphs'
516: Support ANSI C trigraphs. You don't want to know about this
517: brain-damage. The `-ansi' option implies `-trigraphs'.
518:
519: `-traditional'
520: Attempt to support some aspects of traditional C compilers.
521: Specifically:
522:
523: * All `extern' declarations take effect globally even if they
524: are written inside of a function definition. This includes
525: implicit declarations of functions.
526:
1.1.1.5 root 527: * The newer keywords `typeof', `inline', `signed', `const' and
1.1.1.4 root 528: `volatile' are not recognized. (You can still use the
529: alternative keywords such as `__typeof__', `__inline__', and
530: so on.)
531:
532: * Comparisons between pointers and integers are always allowed.
533:
534: * Integer types `unsigned short' and `unsigned char' promote to
535: `unsigned int'.
536:
537: * Out-of-range floating point literals are not an error.
538:
1.1.1.5 root 539: * Certain constructs which ANSI regards as a single invalid
540: preprocessing number, such as `0xe-0xd', are treated as
541: expressions instead.
542:
1.1.1.4 root 543: * String "constants" are not necessarily constant; they are
544: stored in writable space, and identical looking constants are
545: allocated separately. (This is the same as the effect of
546: `-fwritable-strings'.)
547:
548: * All automatic variables not declared `register' are preserved
549: by `longjmp'. Ordinarily, GNU C follows ANSI C: automatic
550: variables not declared `volatile' may be clobbered.
551:
1.1.1.5 root 552: * The character escape sequences `\x' and `\a' evaluate as the
553: literal characters `x' and `a' respectively. Without
554: `-traditional', `\x' is a prefix for the hexadecimal
555: representation of a character, and `\a' produces a bell.
556:
557: * In C++ programs, assignment to `this' is permitted with
558: `-traditional'. (The option `-fthis-is-variable' also has
559: this effect.)
1.1.1.4 root 560:
561: You may wish to use `-fno-builtin' as well as `-traditional' if
562: your program uses names that are normally GNU C builtin functions
563: for other purposes of its own.
564:
1.1.1.7 root 565: You cannot use `-traditional' if you include any header files that
566: rely on ANSI C features. Some vendors are starting to ship
567: systems with ANSI C header files and you cannot use `-traditional'
568: on such systems to compile files that include any system headers.
569:
570: `'
571: In the preprocessor, comments convert to nothing at all, rather
572: than to a space. This allows traditional token concatenation.
573:
574: `'
1.1.1.8 ! root 575: In preprocessing directive, the `#' symbol must appear as the first
1.1.1.7 root 576: character of a line.
577:
578: `'
579: In the preprocessor, macro arguments are recognized within string
580: constants in a macro definition (and their values are stringified,
581: though without additional quote marks, when they appear in such a
582: context). The preprocessor always considers a string constant to
583: end at a newline.
584:
585: `'
586: The predefined macro `__STDC__' is not defined when you use
587: `-traditional', but `__GNUC__' is (since the GNU extensions which
588: `__GNUC__' indicates are not affected by `-traditional'). If you
589: need to write header files that work differently depending on
590: whether `-traditional' is in use, by testing both of these
591: predefined macros you can distinguish four situations: GNU C,
592: traditional GNU C, other ANSI C compilers, and other old C
1.1.1.8 ! root 593: compilers. The predefined macro `__STDC_VERSION__' is also not
! 594: defined when you use `-traditional'. *Note Standard Predefined
! 595: Macros: (cpp.info)Standard Predefined, for more discussion of
! 596: these and other predefined macros.
1.1.1.7 root 597:
598: `'
599: The preprocessor considers a string constant to end at a newline
600: (unless the newline is escaped with `\'). (Without `-traditional',
601: string constants can contain the newline character as typed.)
602:
1.1.1.4 root 603: `-traditional-cpp'
604: Attempt to support some aspects of traditional C preprocessors.
1.1.1.7 root 605: This includes the last five items in the table immediately above,
1.1.1.4 root 606: but none of the other effects of `-traditional'.
607:
608: `-fcond-mismatch'
609: Allow conditional expressions with mismatched types in the second
610: and third arguments. The value of such an expression is void.
611:
612: `-funsigned-char'
613: Let the type `char' be unsigned, like `unsigned char'.
614:
615: Each kind of machine has a default for what `char' should be. It
616: is either like `unsigned char' by default or like `signed char' by
617: default.
618:
619: Ideally, a portable program should always use `signed char' or
620: `unsigned char' when it depends on the signedness of an object.
621: But many programs have been written to use plain `char' and expect
622: it to be signed, or expect it to be unsigned, depending on the
623: machines they were written for. This option, and its inverse, let
624: you make such a program work with the opposite default.
625:
626: The type `char' is always a distinct type from each of `signed
627: char' or `unsigned char', even though its behavior is always just
628: like one of those two.
629:
630: `-fsigned-char'
631: Let the type `char' be signed, like `signed char'.
632:
633: Note that this is equivalent to `-fno-unsigned-char', which is the
1.1.1.5 root 634: negative form of `-funsigned-char'. Likewise, the option
635: `-fno-signed-char' is equivalent to `-funsigned-char'.
1.1.1.4 root 636:
637: `-fsigned-bitfields'
638: `-funsigned-bitfields'
639: `-fno-signed-bitfields'
640: `-fno-unsigned-bitfields'
641: These options control whether a bitfield is signed or unsigned,
1.1.1.5 root 642: when the declaration does not use either `signed' or `unsigned'.
1.1.1.4 root 643: By default, such a bitfield is signed, because this is consistent:
644: the basic integer types such as `int' are signed types.
645:
646: However, when `-traditional' is used, bitfields are all unsigned
647: no matter what.
648:
649: `-fwritable-strings'
650: Store string constants in the writable data segment and don't
651: uniquize them. This is for compatibility with old programs which
1.1.1.5 root 652: assume they can write into string constants. The option
653: `-traditional' also has this effect.
1.1.1.4 root 654:
655: Writing into string constants is a very bad idea; "constants"
656: should be constant.
1.1 root 657:
1.1.1.6 root 658: `-fallow-single-precision'
659: Do not promote single precision math operations to double
660: precision, even when compiling with `-traditional'.
661:
662: Traditional K&R C promotes all floating point operations to double
663: precision, regardless of the sizes of the operands. On the
664: architecture for which you are compiling, single precision may be
665: faster than double precision. If you must use `-traditional',
666: but want to use single precision operations when the operands are
667: single precision, use this option. This option has no effect
668: when compiling with ANSI or GNU C conventions (the default).
669:
1.1 root 670:
1.1.1.5 root 671: File: gcc.info, Node: C++ Dialect Options, Next: Warning Options, Prev: C Dialect Options, Up: Invoking GCC
672:
673: Options Controlling C++ Dialect
674: ===============================
675:
676: This section describes the command-line options that are only
677: meaningful for C++ programs; but you can also use most of the GNU
678: compiler options regardless of what language your program is in. For
679: example, you might compile a file `firstClass.C' like this:
680:
681: g++ -g -felide-constructors -O -c firstClass.C
682:
683: In this example, only `-felide-constructors' is an option meant only
684: for C++ programs; you can use the other options with any language
685: supported by GNU CC.
686:
687: Here is a list of options that are *only* for compiling C++ programs:
688:
1.1.1.7 root 689: `-fno-access-control'
690: Turn off all access checking. This switch is mainly useful for
691: working around bugs in the access control code.
692:
1.1.1.5 root 693: `-fall-virtual'
694: Treat all possible member functions as virtual, implicitly. All
695: member functions (except for constructor functions and `new' or
696: `delete' member operators) are treated as virtual functions of the
697: class where they appear.
698:
699: This does not mean that all calls to these member functions will
700: be made through the internal table of virtual functions. Under
701: some circumstances, the compiler can determine that a call to a
702: given virtual function can be made directly; in these cases the
703: calls are direct in any case.
704:
1.1.1.8 ! root 705: `-fcheck-new'
! 706: Check that the pointer returned by `operator new' is non-null
! 707: before attempting to modify the storage allocated. The current
! 708: Working Paper requires that `operator new' never return a null
! 709: pointer, so this check is normally unnecessary.
! 710:
1.1.1.7 root 711: `-fconserve-space'
712: Put uninitialized or runtime-initialized global variables into the
713: common segment, as C does. This saves space in the executable at
1.1.1.8 ! root 714: the cost of not diagnosing duplicate definitions. If you compile
! 715: with this flag and your program mysteriously crashes after
! 716: `main()' has completed, you may have an object that is being
! 717: destroyed twice because two definitions were merged.
1.1.1.7 root 718:
1.1.1.5 root 719: `-fdollars-in-identifiers'
720: Accept `$' in identifiers. You can also explicitly prohibit use of
721: `$' with the option `-fno-dollars-in-identifiers'. (GNU C++
722: allows `$' by default on some target systems but not others.)
723: Traditional C allowed the character `$' to form part of
724: identifiers. However, ANSI C and C++ forbid `$' in identifiers.
725:
726: `-fenum-int-equiv'
1.1.1.8 ! root 727: Anachronistically permit implicit conversion of `int' to
! 728: enumeration types. Current C++ allows conversion of `enum' to
! 729: `int', but not the other way around.
1.1.1.5 root 730:
1.1.1.6 root 731: `-fexternal-templates'
1.1.1.7 root 732: Cause template instantiations to obey `#pragma interface' and
733: `implementation'; template instances are emitted or not according
734: to the location of the template definition. *Note Template
735: Instantiation::, for more information.
736:
737: `-falt-external-templates'
738: Similar to -fexternal-templates, but template instances are
739: emitted or not according to the place where they are first
740: instantiated. *Note Template Instantiation::, for more
741: information.
742:
1.1.1.8 ! root 743: `-ffor-scope'
! 744: `-fno-for-scope'
! 745: If -ffor-scope is specified, the scope of variables declared in a
! 746: for-init-statement is limited to the `for' loop itself, as
! 747: specified by the draft C++ standard. If -fno-for-scope is
! 748: specified, the scope of variables declared in a for-init-statement
! 749: extends to the end of the enclosing scope, as was the case in old
! 750: versions of gcc, and other (traditional) implementations of C++.
! 751:
! 752: The default if neither flag is given to follow the standard, but
! 753: to allow and give a warning for old-style code that would
! 754: otherwise be invalid, or have different behavior.
! 755:
! 756: `-fno-gnu-keywords'
! 757: Do not recognize `classof', `headof', `signature', `sigof' or
! 758: `typeof' as a keyword, so that code can use these words as
! 759: identifiers. You can use the keywords `__classof__',
! 760: `__headof__', `__signature__', `__sigof__', and `__typeof__'
! 761: instead. `-ansi' implies `-fno-gnu-keywords'.
! 762:
1.1.1.7 root 763: `-fno-implicit-templates'
764: Never emit code for templates which are instantiated implicitly
765: (i.e. by use); only emit code for explicit instantiations. *Note
766: Template Instantiation::, for more information.
767:
768: `-fhandle-signatures'
769: Recognize the `signature' and `sigof' keywords for specifying
770: abstract types. The default (`-fno-handle-signatures') is not to
771: recognize them. *Note Type Abstraction using Signatures: C++
772: Signatures.
773:
774: `-fhuge-objects'
775: Support virtual function calls for objects that exceed the size
776: representable by a `short int'. Users should not use this flag by
777: default; if you need to use it, the compiler will tell you so. If
778: you compile any of your code with this flag, you must compile
779: *all* of your code with this flag (including libg++, if you use
780: it).
781:
782: This flag is not useful when compiling with -fvtable-thunks.
783:
784: `-fno-implement-inlines'
785: To save space, do not emit out-of-line copies of inline functions
786: controlled by `#pragma implementation'. This will cause linker
787: errors if these functions are not inlined everywhere they are
788: called.
1.1.1.6 root 789:
1.1.1.5 root 790: `-fmemoize-lookups'
791: `-fsave-memoized'
792: Use heuristics to compile faster. These heuristics are not
793: enabled by default, since they are only effective for certain
794: input files. Other input files compile more slowly.
795:
796: The first time the compiler must build a call to a member function
797: (or reference to a data member), it must (1) determine whether the
798: class implements member functions of that name; (2) resolve which
799: member function to call (which involves figuring out what sorts of
800: type conversions need to be made); and (3) check the visibility of
801: the member function to the caller. All of this adds up to slower
802: compilation. Normally, the second time a call is made to that
803: member function (or reference to that data member), it must go
804: through the same lengthy process again. This means that code like
805: this:
806:
807: cout << "This " << p << " has " << n << " legs.\n";
808:
809: makes six passes through all three steps. By using a software
810: cache, a "hit" significantly reduces this cost. Unfortunately,
811: using the cache introduces another layer of mechanisms which must
812: be implemented, and so incurs its own overhead.
813: `-fmemoize-lookups' enables the software cache.
814:
815: Because access privileges (visibility) to members and member
816: functions may differ from one function context to the next, G++
817: may need to flush the cache. With the `-fmemoize-lookups' flag,
818: the cache is flushed after every function that is compiled. The
819: `-fsave-memoized' flag enables the same software cache, but when
820: the compiler determines that the context of the last function
821: compiled would yield the same access privileges of the next
822: function to compile, it preserves the cache. This is most helpful
823: when defining many member functions for the same class: with the
824: exception of member functions which are friends of other classes,
825: each member function has exactly the same access privileges as
826: every other, and the cache need not be flushed.
827:
1.1.1.8 ! root 828: The code that implements these flags has rotted; you should
! 829: probably avoid using them.
1.1.1.5 root 830:
1.1.1.8 ! root 831: `-fstrict-prototype'
! 832: Within an `extern "C"' linkage specification, treat a function
! 833: declaration with no arguments, such as `int foo ();', as declaring
! 834: the function to take no arguments. Normally, such a declaration
! 835: means that the function `foo' can take any combination of
! 836: arguments, as in C. `-pedantic' implies `-fstrict-prototype'
! 837: unless overridden with `-fno-strict-prototype'.
! 838:
! 839: This flag no longer affects declarations with C++ linkage.
! 840:
! 841: `-fno-nonnull-objects'
! 842: Don't assume that a reference is initialized to refer to a valid
! 843: object. Although the current C++ Working Paper prohibits null
! 844: references, some old code may rely on them, and you can use
! 845: `-fno-nonnull-objects' to turn on checking.
! 846:
! 847: At the moment, the compiler only does this checking for
! 848: conversions to virtual base classes.
! 849:
! 850: `-foperator-names'
! 851: Recognize the operator name keywords `and', `bitand', `bitor',
! 852: `compl', `not', `or' and `xor' as synonyms for the symbols they
! 853: refer to. `-ansi' implies `-foperator-names'.
1.1.1.7 root 854:
1.1.1.5 root 855: `-fthis-is-variable'
856: Permit assignment to `this'. The incorporation of user-defined
857: free store management into C++ has made assignment to `this' an
858: anachronism. Therefore, by default it is invalid to assign to
1.1.1.7 root 859: `this' within a class member function; that is, GNU C++ treats
860: `this' in a member function of class `X' as a non-lvalue of type
861: `X *'. However, for backwards compatibility, you can make it
862: valid with `-fthis-is-variable'.
863:
864: `-fvtable-thunks'
865: Use `thunks' to implement the virtual function dispatch table
866: (`vtable'). The traditional (cfront-style) approach to
867: implementing vtables was to store a pointer to the function and two
868: offsets for adjusting the `this' pointer at the call site. Newer
869: implementations store a single pointer to a `thunk' function which
870: does any necessary adjustment and then calls the target function.
871:
872: This option also enables a heuristic for controlling emission of
873: vtables; if a class has any non-inline virtual functions, the
874: vtable will be emitted in the translation unit containing the
875: first one of those.
1.1.1.5 root 876:
877: `-nostdinc++'
878: Do not search for header files in the standard directories
879: specific to C++, but do still search the other standard
880: directories. (This option is used when building libg++.)
881:
882: `-traditional'
883: For C++ programs (in addition to the effects that apply to both C
884: and C++), this has the same effect as `-fthis-is-variable'. *Note
885: Options Controlling C Dialect: C Dialect Options.
886:
887: In addition, these optimization, warning, and code generation options
888: have meanings only for C++ programs:
889:
890: `-fno-default-inline'
891: Do not assume `inline' for functions defined inside a class scope.
892: *Note Options That Control Optimization: Optimize Options.
893:
894: `-Wenum-clash'
895: `-Woverloaded-virtual'
896: `-Wtemplate-debugging'
897: Warnings that apply only to C++ programs. *Note Options to
898: Request or Suppress Warnings: Warning Options.
899:
900: `+eN'
901: Control how virtual function definitions are used, in a fashion
902: compatible with `cfront' 1.x. *Note Options for Code Generation
903: Conventions: Code Gen Options.
904:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.