|
|
1.1.1.9 ! root 1: This is Info file gcc.info, produced by Makeinfo version 1.67 from the ! 2: input file gcc.texi. 1.1 root 3: 4: This file documents the use and the internals of the GNU compiler. 5: 1.1.1.8 root 6: Published by the Free Software Foundation 59 Temple Place - Suite 330 7: Boston, MA 02111-1307 USA 1.1.1.5 root 8: 1.1.1.8 root 9: Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software 10: Foundation, Inc. 1.1 root 11: 1.1.1.3 root 12: Permission is granted to make and distribute verbatim copies of this 13: manual provided the copyright notice and this permission notice are 14: preserved on all copies. 1.1 root 15: 16: Permission is granted to copy and distribute modified versions of 17: this manual under the conditions for verbatim copying, provided also 1.1.1.7 root 18: that the sections entitled "GNU General Public License," "Funding for 19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are 20: included exactly as in the original, and provided that the entire 21: resulting derived work is distributed under the terms of a permission 22: notice identical to this one. 1.1 root 23: 24: Permission is granted to copy and distribute translations of this 25: manual into another language, under the above conditions for modified 1.1.1.3 root 26: versions, except that the sections entitled "GNU General Public 1.1.1.7 root 27: License," "Funding for Free Software," and "Protect Your Freedom--Fight 28: `Look And Feel'", and this permission notice, may be included in 29: translations approved by the Free Software Foundation instead of in the 30: original English. 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.