| This is Info file gcc.info, produced by Makeinfo version 1.68 from the |
| input file gcc.texi. |
| |
| This file documents the use and the internals of the GNU compiler. |
| |
| Published by the Free Software Foundation 59 Temple Place - Suite 330 |
| Boston, MA 02111-1307 USA |
| |
| Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998 |
| Free Software Foundation, Inc. |
| |
| Permission is granted to make and distribute verbatim copies of this |
| manual provided the copyright notice and this permission notice are |
| preserved on all copies. |
| |
| Permission is granted to copy and distribute modified versions of |
| this manual under the conditions for verbatim copying, provided also |
| that the sections entitled "GNU General Public License," "Funding for |
| Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are |
| included exactly as in the original, and provided that the entire |
| resulting derived work is distributed under the terms of a permission |
| notice identical to this one. |
| |
| Permission is granted to copy and distribute translations of this |
| manual into another language, under the above conditions for modified |
| versions, except that the sections entitled "GNU General Public |
| License," "Funding for Free Software," and "Protect Your Freedom--Fight |
| `Look And Feel'", and this permission notice, may be included in |
| translations approved by the Free Software Foundation instead of in the |
| original English. |
| |
| |
| File: gcc.info, Node: Top, Next: G++ and GCC, Up: (DIR) |
| |
| Introduction |
| ************ |
| |
| This manual documents how to run, install and port the GNU compiler, |
| as well as its new features and incompatibilities, and how to report |
| bugs. It corresponds to GNU CC version 2.8.0. |
| |
| * Menu: |
| |
| |
| * G++ and GCC:: You can compile C or C++ programs. |
| * Invoking GCC:: Command options supported by `gcc'. |
| * Installation:: How to configure, compile and install GNU CC. |
| * C Extensions:: GNU extensions to the C language family. |
| * C++ Extensions:: GNU extensions to the C++ language. |
| * Gcov:: gcov: a GNU CC test coverage program. |
| * Trouble:: If you have trouble installing GNU CC. |
| * Bugs:: How, why and where to report bugs. |
| * Service:: How to find suppliers of support for GNU CC. |
| * Contributing:: How to contribute to testing and developing GNU CC. |
| * VMS:: Using GNU CC on VMS. |
| |
| * Portability:: Goals of GNU CC's portability features. |
| * Interface:: Function-call interface of GNU CC output. |
| * Passes:: Order of passes, what they do, and what each file is for. |
| * RTL:: The intermediate representation that most passes work on. |
| * Machine Desc:: How to write machine description instruction patterns. |
| * Target Macros:: How to write the machine description C macros. |
| * Config:: Writing the `xm-MACHINE.h' file. |
| * Fragments:: Writing the `t-TARGET' and `x-HOST' files. |
| |
| * Funding:: How to help assure funding for free software. |
| * Look and Feel:: Protect your freedom--fight "look and feel". |
| |
| * Copying:: GNU General Public License says |
| how you can copy and share GNU CC. |
| * Contributors:: People who have contributed to GNU CC. |
| |
| * Index:: Index of concepts and symbol names. |
| |
| |
| File: gcc.info, Node: G++ and GCC, Next: Invoking GCC, Prev: Top, Up: Top |
| |
| Compile C, C++, or Objective C |
| ****************************** |
| |
| The C, C++, and Objective C versions of the compiler are integrated; |
| the GNU C compiler can compile programs written in C, C++, or Objective |
| C. |
| |
| "GCC" is a common shorthand term for the GNU C compiler. This is |
| both the most general name for the compiler, and the name used when the |
| emphasis is on compiling C programs. |
| |
| When referring to C++ compilation, it is usual to call the compiler |
| "G++". Since there is only one compiler, it is also accurate to call |
| it "GCC" no matter what the language context; however, the term "G++" |
| is more useful when the emphasis is on compiling C++ programs. |
| |
| We use the name "GNU CC" to refer to the compilation system as a |
| whole, and more specifically to the language-independent part of the |
| compiler. For example, we refer to the optimization options as |
| affecting the behavior of "GNU CC" or sometimes just "the compiler". |
| |
| Front ends for other languages, such as Ada 9X, Fortran, Modula-3, |
| and Pascal, are under development. These front-ends, like that for |
| C++, are built in subdirectories of GNU CC and link to it. The result |
| is an integrated compiler that can compile programs written in C, C++, |
| Objective C, or any of the languages for which you have installed front |
| ends. |
| |
| In this manual, we only discuss the options for the C, Objective-C, |
| and C++ compilers and those of the GNU CC core. Consult the |
| documentation of the other front ends for the options to use when |
| compiling programs written in other languages. |
| |
| G++ is a *compiler*, not merely a preprocessor. G++ builds object |
| code directly from your C++ program source. There is no intermediate C |
| version of the program. (By contrast, for example, some other |
| implementations use a program that generates a C program from your C++ |
| source.) Avoiding an intermediate C representation of the program means |
| that you get better object code, and better debugging information. The |
| GNU debugger, GDB, works with this information in the object code to |
| give you comprehensive C++ source-level editing capabilities (*note C |
| and C++: (gdb.info)C.). |
| |
| |
| File: gcc.info, Node: Invoking GCC, Next: Installation, Prev: G++ and GCC, Up: Top |
| |
| GNU CC Command Options |
| ********************** |
| |
| When you invoke GNU CC, it normally does preprocessing, compilation, |
| assembly and linking. The "overall options" allow you to stop this |
| process at an intermediate stage. For example, the `-c' option says |
| not to run the linker. Then the output consists of object files output |
| by the assembler. |
| |
| Other options are passed on to one stage of processing. Some options |
| control the preprocessor and others the compiler itself. Yet other |
| options control the assembler and linker; most of these are not |
| documented here, since you rarely need to use any of them. |
| |
| Most of the command line options that you can use with GNU CC are |
| useful for C programs; when an option is only useful with another |
| language (usually C++), the explanation says so explicitly. If the |
| description for a particular option does not mention a source language, |
| you can use that option with all supported languages. |
| |
| *Note Compiling C++ Programs: Invoking G++, for a summary of special |
| options for compiling C++ programs. |
| |
| The `gcc' program accepts options and file names as operands. Many |
| options have multiletter names; therefore multiple single-letter options |
| may *not* be grouped: `-dr' is very different from `-d -r'. |
| |
| You can mix options and other arguments. For the most part, the |
| order you use doesn't matter. Order does matter when you use several |
| options of the same kind; for example, if you specify `-L' more than |
| once, the directories are searched in the order specified. |
| |
| Many options have long names starting with `-f' or with `-W'--for |
| example, `-fforce-mem', `-fstrength-reduce', `-Wformat' and so on. |
| Most of these have both positive and negative forms; the negative form |
| of `-ffoo' would be `-fno-foo'. This manual documents only one of |
| these two forms, whichever one is not the default. |
| |
| * Menu: |
| |
| * Option Summary:: Brief list of all options, without explanations. |
| * Overall Options:: Controlling the kind of output: |
| an executable, object files, assembler files, |
| or preprocessed source. |
| * Invoking G++:: Compiling C++ programs. |
| * C Dialect Options:: Controlling the variant of C language compiled. |
| * C++ Dialect Options:: Variations on C++. |
| * Warning Options:: How picky should the compiler be? |
| * Debugging Options:: Symbol tables, measurements, and debugging dumps. |
| * Optimize Options:: How much optimization? |
| * Preprocessor Options:: Controlling header files and macro definitions. |
| Also, getting dependency information for Make. |
| * Assembler Options:: Passing options to the assembler. |
| * Link Options:: Specifying libraries and so on. |
| * Directory Options:: Where to find header files and libraries. |
| Where to find the compiler executable files. |
| * Target Options:: Running a cross-compiler, or an old version of GNU CC. |
| * Submodel Options:: Specifying minor hardware or convention variations, |
| such as 68010 vs 68020. |
| * Code Gen Options:: Specifying conventions for function calls, data layout |
| and register usage. |
| * Environment Variables:: Env vars that affect GNU CC. |
| * Running Protoize:: Automatically adding or removing function prototypes. |
| |
| |
| File: gcc.info, Node: Option Summary, Next: Overall Options, Up: Invoking GCC |
| |
| Option Summary |
| ============== |
| |
| Here is a summary of all the options, grouped by type. Explanations |
| are in the following sections. |
| |
| *Overall Options* |
| *Note Options Controlling the Kind of Output: Overall Options. |
| -c -S -E -o FILE -pipe -v -x LANGUAGE |
| |
| *C Language Options* |
| *Note Options Controlling C Dialect: C Dialect Options. |
| -ansi -fallow-single-precision -fcond-mismatch -fno-asm |
| -fno-builtin -ffreestanding -fhosted -fsigned-bitfields -fsigned-char |
| -funsigned-bitfields -funsigned-char -fwritable-strings |
| -traditional -traditional-cpp -trigraphs |
| |
| *C++ Language Options* |
| *Note Options Controlling C++ Dialect: C++ Dialect Options. |
| -fall-virtual -fdollars-in-identifiers -felide-constructors |
| -fenum-int-equiv -fexternal-templates -ffor-scope -fno-for-scope |
| -fhandle-signatures -fmemoize-lookups -fname-mangling-version-N |
| -fno-default-inline -fno-gnu-keywords -fnonnull-objects -fguiding-decls |
| -foperator-names -fstrict-prototype -fthis-is-variable |
| -ftemplate-depth-N -nostdinc++ -traditional +eN |
| |
| *Warning Options* |
| *Note Options to Request or Suppress Warnings: Warning Options. |
| -fsyntax-only -pedantic -pedantic-errors |
| -w -W -Wall -Waggregate-return -Wbad-function-cast |
| -Wcast-align -Wcast-qual -Wchar-subscript -Wcomment |
| -Wconversion -Werror -Wformat |
| -Wid-clash-LEN -Wimplicit -Wimplicit-int |
| -Wimplicit-function-declarations -Wimport -Winline |
| -Wlarger-than-LEN -Wmain -Wmissing-declarations |
| -Wmissing-prototypes -Wnested-externs |
| -Wno-import -Wold-style-cast -Woverloaded-virtual -Wparentheses |
| -Wpointer-arith -Wredundant-decls -Wreorder -Wreturn-type -Wshadow |
| -Wsign-compare -Wstrict-prototypes -Wswitch -Wsynth |
| -Wtemplate-debugging -Wtraditional -Wtrigraphs |
| -Wundef -Wuninitialized -Wunused -Wwrite-strings |
| |
| *Debugging Options* |
| *Note Options for Debugging Your Program or GCC: Debugging Options. |
| -a -ax -dLETTERS -fpretend-float |
| -fprofile-arcs -ftest-coverage |
| -g -gLEVEL -gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 |
| -ggdb -gstabs -gstabs+ -gxcoff -gxcoff+ |
| -p -pg -print-file-name=LIBRARY -print-libgcc-file-name |
| -print-prog-name=PROGRAM -print-search-dirs -save-temps |
| |
| *Optimization Options* |
| *Note Options that Control Optimization: Optimize Options. |
| -fbranch-probabilities |
| -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks |
| -fdelayed-branch -fexpensive-optimizations |
| -ffast-math -ffloat-store -fforce-addr -fforce-mem |
| -ffunction-sections -finline-functions |
| -fkeep-inline-functions -fno-default-inline |
| -fno-defer-pop -fno-function-cse |
| -fno-inline -fno-peephole -fomit-frame-pointer |
| -frerun-cse-after-loop -fschedule-insns |
| -fschedule-insns2 -fstrength-reduce -fthread-jumps |
| -funroll-all-loops -funroll-loops |
| -O -O0 -O1 -O2 -O3 |
| |
| *Preprocessor Options* |
| *Note Options Controlling the Preprocessor: Preprocessor Options. |
| -AQUESTION(ANSWER) -C -dD -dM -dN |
| -DMACRO[=DEFN] -E -H |
| -idirafter DIR |
| -include FILE -imacros FILE |
| -iprefix FILE -iwithprefix DIR |
| -iwithprefixbefore DIR -isystem DIR |
| -M -MD -MM -MMD -MG -nostdinc -P -trigraphs |
| -undef -UMACRO -Wp,OPTION |
| |
| *Assembler Option* |
| *Note Passing Options to the Assembler: Assembler Options. |
| -Wa,OPTION |
| |
| *Linker Options* |
| *Note Options for Linking: Link Options. |
| OBJECT-FILE-NAME -lLIBRARY |
| -nostartfiles -nodefaultlibs -nostdlib |
| -s -static -shared -symbolic |
| -Wl,OPTION -Xlinker OPTION |
| -u SYMBOL |
| |
| *Directory Options* |
| *Note Options for Directory Search: Directory Options. |
| -BPREFIX -IDIR -I- -LDIR -specs=FILE |
| |
| *Target Options* |
| *Note Target Options::. |
| -b MACHINE -V VERSION |
| |
| *Machine Dependent Options* |
| *Note Hardware Models and Configurations: Submodel Options. |
| *M680x0 Options* |
| -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 |
| -m68060 -m5200 -m68881 -mbitfield -mc68000 -mc68020 -mfpa |
| -mnobitfield -mrtd -mshort -msoft-float -malign-int |
| |
| *VAX Options* |
| -mg -mgnu -munix |
| |
| *SPARC Options* |
| -mcpu=CPU TYPE |
| -mtune=CPU TYPE |
| -mcmodel=CODE MODEL |
| -malign-jumps=NUM -malign-loops=NUM |
| -malign-functions=NUM |
| -m32 -m64 |
| -mapp-regs -mbroken-saverestore -mcypress -mepilogue |
| -mflat -mfpu -mhard-float -mhard-quad-float |
| -mimpure-text -mlive-g0 -mno-app-regs -mno-epilogue |
| -mno-flat -mno-fpu -mno-impure-text |
| -mno-stack-bias -mno-unaligned-doubles |
| -msoft-float -msoft-quad-float -msparclite -mstack-bias |
| -msupersparc -munaligned-doubles -mv8 |
| |
| *Convex Options* |
| -mc1 -mc2 -mc32 -mc34 -mc38 |
| -margcount -mnoargcount |
| -mlong32 -mlong64 |
| -mvolatile-cache -mvolatile-nocache |
| |
| *AMD29K Options* |
| -m29000 -m29050 -mbw -mnbw -mdw -mndw |
| -mlarge -mnormal -msmall |
| -mkernel-registers -mno-reuse-arg-regs |
| -mno-stack-check -mno-storem-bug |
| -mreuse-arg-regs -msoft-float -mstack-check |
| -mstorem-bug -muser-registers |
| |
| *ARM Options* |
| -mapcs-frame -mapcs-26 -mapcs-32 |
| -mlittle-endian -mbig-endian -mwords-little-endian |
| -mshort-load-bytes -mno-short-load-bytes |
| -msoft-float -mhard-float |
| -mbsd -mxopen -mno-symrename |
| |
| *MN10300 Options* |
| -mmult-bug |
| -mno-mult-bug |
| |
| *M32R/D Options* |
| -mcode-model=MODEL TYPE -msdata=SDATA TYPE |
| -G NUM |
| |
| *M88K Options* |
| -m88000 -m88100 -m88110 -mbig-pic |
| -mcheck-zero-division -mhandle-large-shift |
| -midentify-revision -mno-check-zero-division |
| -mno-ocs-debug-info -mno-ocs-frame-position |
| -mno-optimize-arg-area -mno-serialize-volatile |
| -mno-underscores -mocs-debug-info |
| -mocs-frame-position -moptimize-arg-area |
| -mserialize-volatile -mshort-data-NUM -msvr3 |
| -msvr4 -mtrap-large-shift -muse-div-instruction |
| -mversion-03.00 -mwarn-passed-structs |
| |
| *RS/6000 and PowerPC Options* |
| -mcpu=CPU TYPE |
| -mtune=CPU TYPE |
| -mpower -mno-power -mpower2 -mno-power2 |
| -mpowerpc -mno-powerpc |
| -mpowerpc-gpopt -mno-powerpc-gpopt |
| -mpowerpc-gfxopt -mno-powerpc-gfxopt |
| -mnew-mnemonics -mno-new-mnemonics |
| -mfull-toc -mminimal-toc -mno-fop-in-toc -mno-sum-in-toc |
| -mxl-call -mno-xl-call -mthreads -mpe |
| -msoft-float -mhard-float -mmultiple -mno-multiple |
| -mstring -mno-string -mupdate -mno-update |
| -mfused-madd -mno-fused-madd -mbit-align -mno-bit-align |
| -mstrict-align -mno-strict-align -mrelocatable |
| -mno-relocatable -mrelocatable-lib -mno-relocatable-lib |
| -mtoc -mno-toc -mtraceback -mno-traceback |
| -mlittle -mlittle-endian -mbig -mbig-endian |
| -mcall-aix -mcall-sysv -mprototype -mno-prototype |
| -msim -mmvme -mads -myellowknife -memb |
| -msdata -msdata=OPT -G NUM |
| |
| *RT Options* |
| -mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs |
| -mfull-fp-blocks -mhc-struct-return -min-line-mul |
| -mminimum-fp-blocks -mnohc-struct-return |
| |
| *MIPS Options* |
| -mabicalls -mcpu=CPU TYPE -membedded-data |
| -membedded-pic -mfp32 -mfp64 -mgas -mgp32 -mgp64 |
| -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 |
| -mips2 -mips3 -mlong64 -mlong-calls -mmemcpy |
| -mmips-as -mmips-tfile -mno-abicalls |
| -mno-embedded-data -mno-embedded-pic |
| -mno-gpopt -mno-long-calls |
| -mno-memcpy -mno-mips-tfile -mno-rnames -mno-stats |
| -mrnames -msoft-float |
| -m4650 -msingle-float -mmad |
| -mstats -EL -EB -G NUM -nocpp |
| |
| *i386 Options* |
| -mcpu=CPU TYPE |
| -march=CPU TYPE |
| -mieee-fp -mno-fancy-math-387 |
| -mno-fp-ret-in-387 -msoft-float -msvr3-shlib |
| -mno-wide-multiply -mrtd -malign-double |
| -mreg-alloc=LIST -mregparm=NUM |
| -malign-jumps=NUM -malign-loops=NUM |
| -malign-functions=NUM |
| |
| *HPPA Options* |
| -mbig-switch -mdisable-fpregs -mdisable-indexing -mfast-indirect-calls |
| -mgas -mjump-in-delay -mlong-load-store -mno-big-switch -mno-disable-fpregs |
| -mno-disable-indexing -mno-fast-indirect-calls -mno-gas |
| -mno-jump-in-delay |
| -mno-long-load-store |
| -mno-portable-runtime -mno-soft-float -mno-space -mno-space-regs |
| -msoft-float |
| -mpa-risc-1-0 -mpa-risc-1-1 -mportable-runtime |
| -mschedule=LIST -mspace -mspace-regs |
| |
| *Intel 960 Options* |
| -mCPU TYPE -masm-compat -mclean-linkage |
| -mcode-align -mcomplex-addr -mleaf-procedures |
| -mic-compat -mic2.0-compat -mic3.0-compat |
| -mintel-asm -mno-clean-linkage -mno-code-align |
| -mno-complex-addr -mno-leaf-procedures |
| -mno-old-align -mno-strict-align -mno-tail-call |
| -mnumerics -mold-align -msoft-float -mstrict-align |
| -mtail-call |
| |
| *DEC Alpha Options* |
| -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float |
| -malpha-as -mgas |
| -mieee -mieee-with-inexact -mieee-conformant |
| -mfp-trap-mode=MODE -mfp-rounding-mode=MODE |
| -mtrap-precision=MODE -mbuild-constants |
| -mcpu=CPU TYPE |
| -mbwx -mno-bwx -mcix -mno-cix -mmax -mno-max |
| |
| *Clipper Options* |
| -mc300 -mc400 |
| |
| *H8/300 Options* |
| -mrelax -mh -ms -mint32 -malign-300 |
| |
| *SH Options* |
| -m1 -m2 -m3 -m3e -mb -ml -mrelax |
| |
| *System V Options* |
| -Qy -Qn -YP,PATHS -Ym,DIR |
| |
| *V850 Options* |
| -mlong-calls -mno-long-calls -mep -mno-ep |
| -mprolog-function -mno-prolog-function -mspace |
| -mtda=N -msda=N -mzda=N |
| -mv850 -mbig-switch |
| |
| *Code Generation Options* |
| *Note Options for Code Generation Conventions: Code Gen Options. |
| -fcall-saved-REG -fcall-used-REG |
| -ffixed-REG -finhibit-size-directive |
| -fcheck-memory-usage -fprefix-function-name |
| -fno-common -fno-ident -fno-gnu-linker |
| -fpcc-struct-return -freg-struct-return |
| -fshared-data -fpic -fPIC -fexceptions |
| -fshort-enums -fshort-double -fvolatile -fvolatile-global |
| -fverbose-asm -fpack-struct -fstack-check +e0 +e1 |
| |
| * Menu: |
| |
| * Overall Options:: Controlling the kind of output: |
| an executable, object files, assembler files, |
| or preprocessed source. |
| * C Dialect Options:: Controlling the variant of C language compiled. |
| * C++ Dialect Options:: Variations on C++. |
| * Warning Options:: How picky should the compiler be? |
| * Debugging Options:: Symbol tables, measurements, and debugging dumps. |
| * Optimize Options:: How much optimization? |
| * Preprocessor Options:: Controlling header files and macro definitions. |
| Also, getting dependency information for Make. |
| * Assembler Options:: Passing options to the assembler. |
| * Link Options:: Specifying libraries and so on. |
| * Directory Options:: Where to find header files and libraries. |
| Where to find the compiler executable files. |
| * Target Options:: Running a cross-compiler, or an old version of GNU CC. |
| |
| |
| File: gcc.info, Node: Overall Options, Next: Invoking G++, Prev: Option Summary, Up: Invoking GCC |
| |
| Options Controlling the Kind of Output |
| ====================================== |
| |
| Compilation can involve up to four stages: preprocessing, compilation |
| proper, assembly and linking, always in that order. The first three |
| stages apply to an individual source file, and end by producing an |
| object file; linking combines all the object files (those newly |
| compiled, and those specified as input) into an executable file. |
| |
| For any given input file, the file name suffix determines what kind |
| of compilation is done: |
| |
| `FILE.c' |
| C source code which must be preprocessed. |
| |
| `FILE.i' |
| C source code which should not be preprocessed. |
| |
| `FILE.ii' |
| C++ source code which should not be preprocessed. |
| |
| `FILE.m' |
| Objective-C source code. Note that you must link with the library |
| `libobjc.a' to make an Objective-C program work. |
| |
| `FILE.h' |
| C header file (not to be compiled or linked). |
| |
| `FILE.cc' |
| `FILE.cxx' |
| `FILE.cpp' |
| `FILE.C' |
| C++ source code which must be preprocessed. Note that in `.cxx', |
| the last two letters must both be literally `x'. Likewise, `.C' |
| refers to a literal capital C. |
| |
| `FILE.s' |
| Assembler code. |
| |
| `FILE.S' |
| Assembler code which must be preprocessed. |
| |
| `OTHER' |
| An object file to be fed straight into linking. Any file name |
| with no recognized suffix is treated this way. |
| |
| You can specify the input language explicitly with the `-x' option: |
| |
| `-x LANGUAGE' |
| Specify explicitly the LANGUAGE for the following input files |
| (rather than letting the compiler choose a default based on the |
| file name suffix). This option applies to all following input |
| files until the next `-x' option. Possible values for LANGUAGE |
| are: |
| c objective-c c++ |
| c-header cpp-output c++-cpp-output |
| assembler assembler-with-cpp |
| |
| `-x none' |
| Turn off any specification of a language, so that subsequent files |
| are handled according to their file name suffixes (as they are if |
| `-x' has not been used at all). |
| |
| If you only want some of the stages of compilation, you can use `-x' |
| (or filename suffixes) to tell `gcc' where to start, and one of the |
| options `-c', `-S', or `-E' to say where `gcc' is to stop. Note that |
| some combinations (for example, `-x cpp-output -E' instruct `gcc' to do |
| nothing at all. |
| |
| `-c' |
| Compile or assemble the source files, but do not link. The linking |
| stage simply is not done. The ultimate output is in the form of an |
| object file for each source file. |
| |
| By default, the object file name for a source file is made by |
| replacing the suffix `.c', `.i', `.s', etc., with `.o'. |
| |
| Unrecognized input files, not requiring compilation or assembly, |
| are ignored. |
| |
| `-S' |
| Stop after the stage of compilation proper; do not assemble. The |
| output is in the form of an assembler code file for each |
| non-assembler input file specified. |
| |
| By default, the assembler file name for a source file is made by |
| replacing the suffix `.c', `.i', etc., with `.s'. |
| |
| Input files that don't require compilation are ignored. |
| |
| `-E' |
| Stop after the preprocessing stage; do not run the compiler |
| proper. The output is in the form of preprocessed source code, |
| which is sent to the standard output. |
| |
| Input files which don't require preprocessing are ignored. |
| |
| `-o FILE' |
| Place output in file FILE. This applies regardless to whatever |
| sort of output is being produced, whether it be an executable file, |
| an object file, an assembler file or preprocessed C code. |
| |
| Since only one output file can be specified, it does not make |
| sense to use `-o' when compiling more than one input file, unless |
| you are producing an executable file as output. |
| |
| If `-o' is not specified, the default is to put an executable file |
| in `a.out', the object file for `SOURCE.SUFFIX' in `SOURCE.o', its |
| assembler file in `SOURCE.s', and all preprocessed C source on |
| standard output. |
| |
| `-v' |
| Print (on standard error output) the commands executed to run the |
| stages of compilation. Also print the version number of the |
| compiler driver program and of the preprocessor and the compiler |
| proper. |
| |
| `-pipe' |
| Use pipes rather than temporary files for communication between the |
| various stages of compilation. This fails to work on some systems |
| where the assembler is unable to read from a pipe; but the GNU |
| assembler has no trouble. |
| |
| |
| File: gcc.info, Node: Invoking G++, Next: C Dialect Options, Prev: Overall Options, Up: Invoking GCC |
| |
| Compiling C++ Programs |
| ====================== |
| |
| C++ source files conventionally use one of the suffixes `.C', `.cc', |
| `cpp', or `.cxx'; preprocessed C++ files use the suffix `.ii'. GNU CC |
| recognizes files with these names and compiles them as C++ programs |
| even if you call the compiler the same way as for compiling C programs |
| (usually with the name `gcc'). |
| |
| However, C++ programs often require class libraries as well as a |
| compiler that understands the C++ language--and under some |
| circumstances, you might want to compile programs from standard input, |
| or otherwise without a suffix that flags them as C++ programs. `g++' |
| is a program that calls GNU CC with the default language set to C++, |
| and automatically specifies linking against the GNU class library |
| libg++. (1) On many systems, the script `g++' is also installed with |
| the name `c++'. |
| |
| When you compile C++ programs, you may specify many of the same |
| command-line options that you use for compiling programs in any |
| language; or command-line options meaningful for C and related |
| languages; or options that are meaningful only for C++ programs. *Note |
| Options Controlling C Dialect: C Dialect Options, for explanations of |
| options for languages related to C. *Note Options Controlling C++ |
| Dialect: C++ Dialect Options, for explanations of options that are |
| meaningful only for C++ programs. |
| |
| ---------- Footnotes ---------- |
| |
| (1) Prior to release 2 of the compiler, there was a separate `g++' |
| compiler. That version was based on GNU CC, but not integrated with |
| it. Versions of `g++' with a `1.XX' version number--for example, `g++' |
| version 1.37 or 1.42--are much less reliable than the versions |
| integrated with GCC 2. Moreover, combining G++ `1.XX' with a version 2 |
| GCC will simply not work. |
| |
| |
| File: gcc.info, Node: C Dialect Options, Next: C++ Dialect Options, Prev: Invoking G++, Up: Invoking GCC |
| |
| Options Controlling C Dialect |
| ============================= |
| |
| The following options control the dialect of C (or languages derived |
| from C, such as C++ and Objective C) that the compiler accepts: |
| |
| `-ansi' |
| Support all ANSI standard C programs. |
| |
| This turns off certain features of GNU C that are incompatible |
| with ANSI C, such as the `asm', `inline' and `typeof' keywords, and |
| predefined macros such as `unix' and `vax' that identify the type |
| of system you are using. It also enables the undesirable and |
| rarely used ANSI trigraph feature, and it disables recognition of |
| C++ style `//' comments. |
| |
| The alternate keywords `__asm__', `__extension__', `__inline__' |
| and `__typeof__' continue to work despite `-ansi'. You would not |
| want to use them in an ANSI C program, of course, but it is useful |
| to put them in header files that might be included in compilations |
| done with `-ansi'. Alternate predefined macros such as `__unix__' |
| and `__vax__' are also available, with or without `-ansi'. |
| |
| The `-ansi' option does not cause non-ANSI programs to be rejected |
| gratuitously. For that, `-pedantic' is required in addition to |
| `-ansi'. *Note Warning Options::. |
| |
| The macro `__STRICT_ANSI__' is predefined when the `-ansi' option |
| is used. Some header files may notice this macro and refrain from |
| declaring certain functions or defining certain macros that the |
| ANSI standard doesn't call for; this is to avoid interfering with |
| any programs that might use these names for other things. |
| |
| The functions `alloca', `abort', `exit', and `_exit' are not |
| builtin functions when `-ansi' is used. |
| |
| `-fno-asm' |
| Do not recognize `asm', `inline' or `typeof' as a keyword, so that |
| code can use these words as identifiers. You can use the keywords |
| `__asm__', `__inline__' and `__typeof__' instead. `-ansi' implies |
| `-fno-asm'. |
| |
| In C++, this switch only affects the `typeof' keyword, since `asm' |
| and `inline' are standard keywords. You may want to use the |
| `-fno-gnu-keywords' flag instead, as it also disables the other, |
| C++-specific, extension keywords such as `headof'. |
| |
| `-fno-builtin' |
| Don't recognize builtin functions that do not begin with two |
| leading underscores. Currently, the functions affected include |
| `abort', `abs', `alloca', `cos', `exit', `fabs', `ffs', `labs', |
| `memcmp', `memcpy', `sin', `sqrt', `strcmp', `strcpy', and |
| `strlen'. |
| |
| GCC normally generates special code to handle certain builtin |
| functions more efficiently; for instance, calls to `alloca' may |
| become single instructions that adjust the stack directly, and |
| calls to `memcpy' may become inline copy loops. The resulting |
| code is often both smaller and faster, but since the function |
| calls no longer appear as such, you cannot set a breakpoint on |
| those calls, nor can you change the behavior of the functions by |
| linking with a different library. |
| |
| The `-ansi' option prevents `alloca' and `ffs' from being builtin |
| functions, since these functions do not have an ANSI standard |
| meaning. |
| |
| `-fhosted' |
| Assert that compilation takes place in a hosted environment. This |
| implies `-fbuiltin'. A hosted environment is one in which the |
| entire standard library is available, and in which `main' has a |
| return type of `int'. Examples are nearly everything except a |
| kernel. This is equivalent to `-fno-freestanding'. |
| |
| `-ffreestanding' |
| Assert that compilation takes place in a freestanding environment. |
| This implies `-fno-builtin'. A freestanding environment is one |
| in which the standard library may not exist, and program startup |
| may not necessarily be at `main'. The most obvious example is an |
| OS kernel. This is equivalent to `-fno-hosted'. |
| |
| `-trigraphs' |
| Support ANSI C trigraphs. You don't want to know about this |
| brain-damage. The `-ansi' option implies `-trigraphs'. |
| |
| `-traditional' |
| Attempt to support some aspects of traditional C compilers. |
| Specifically: |
| |
| * All `extern' declarations take effect globally even if they |
| are written inside of a function definition. This includes |
| implicit declarations of functions. |
| |
| * The newer keywords `typeof', `inline', `signed', `const' and |
| `volatile' are not recognized. (You can still use the |
| alternative keywords such as `__typeof__', `__inline__', and |
| so on.) |
| |
| * Comparisons between pointers and integers are always allowed. |
| |
| * Integer types `unsigned short' and `unsigned char' promote to |
| `unsigned int'. |
| |
| * Out-of-range floating point literals are not an error. |
| |
| * Certain constructs which ANSI regards as a single invalid |
| preprocessing number, such as `0xe-0xd', are treated as |
| expressions instead. |
| |
| * String "constants" are not necessarily constant; they are |
| stored in writable space, and identical looking constants are |
| allocated separately. (This is the same as the effect of |
| `-fwritable-strings'.) |
| |
| * All automatic variables not declared `register' are preserved |
| by `longjmp'. Ordinarily, GNU C follows ANSI C: automatic |
| variables not declared `volatile' may be clobbered. |
| |
| * The character escape sequences `\x' and `\a' evaluate as the |
| literal characters `x' and `a' respectively. Without |
| `-traditional', `\x' is a prefix for the hexadecimal |
| representation of a character, and `\a' produces a bell. |
| |
| * In C++ programs, assignment to `this' is permitted with |
| `-traditional'. (The option `-fthis-is-variable' also has |
| this effect.) |
| |
| You may wish to use `-fno-builtin' as well as `-traditional' if |
| your program uses names that are normally GNU C builtin functions |
| for other purposes of its own. |
| |
| You cannot use `-traditional' if you include any header files that |
| rely on ANSI C features. Some vendors are starting to ship |
| systems with ANSI C header files and you cannot use `-traditional' |
| on such systems to compile files that include any system headers. |
| |
| The `-traditional' option also enables the `-traditional-cpp' |
| option, which is described next. |
| |
| `-traditional-cpp' |
| Attempt to support some aspects of traditional C preprocessors. |
| Specifically: |
| |
| * Comments convert to nothing at all, rather than to a space. |
| This allows traditional token concatenation. |
| |
| * In a preprocessing directive, the `#' symbol must appear as |
| the first character of a line. |
| |
| * Macro arguments are recognized within string constants in a |
| macro definition (and their values are stringified, though |
| without additional quote marks, when they appear in such a |
| context). The preprocessor always considers a string |
| constant to end at a newline. |
| |
| * The predefined macro `__STDC__' is not defined when you use |
| `-traditional', but `__GNUC__' is (since the GNU extensions |
| which `__GNUC__' indicates are not affected by |
| `-traditional'). If you need to write header files that work |
| differently depending on whether `-traditional' is in use, by |
| testing both of these predefined macros you can distinguish |
| four situations: GNU C, traditional GNU C, other ANSI C |
| compilers, and other old C compilers. The predefined macro |
| `__STDC_VERSION__' is also not defined when you use |
| `-traditional'. *Note Standard Predefined Macros: |
| (cpp.info)Standard Predefined, for more discussion of these |
| and other predefined macros. |
| |
| * The preprocessor considers a string constant to end at a |
| newline (unless the newline is escaped with `\'). (Without |
| `-traditional', string constants can contain the newline |
| character as typed.) |
| |
| `-fcond-mismatch' |
| Allow conditional expressions with mismatched types in the second |
| and third arguments. The value of such an expression is void. |
| |
| `-funsigned-char' |
| Let the type `char' be unsigned, like `unsigned char'. |
| |
| Each kind of machine has a default for what `char' should be. It |
| is either like `unsigned char' by default or like `signed char' by |
| default. |
| |
| Ideally, a portable program should always use `signed char' or |
| `unsigned char' when it depends on the signedness of an object. |
| But many programs have been written to use plain `char' and expect |
| it to be signed, or expect it to be unsigned, depending on the |
| machines they were written for. This option, and its inverse, let |
| you make such a program work with the opposite default. |
| |
| The type `char' is always a distinct type from each of `signed |
| char' or `unsigned char', even though its behavior is always just |
| like one of those two. |
| |
| `-fsigned-char' |
| Let the type `char' be signed, like `signed char'. |
| |
| Note that this is equivalent to `-fno-unsigned-char', which is the |
| negative form of `-funsigned-char'. Likewise, the option |
| `-fno-signed-char' is equivalent to `-funsigned-char'. |
| |
| You may wish to use `-fno-builtin' as well as `-traditional' if |
| your program uses names that are normally GNU C builtin functions |
| for other purposes of its own. |
| |
| You cannot use `-traditional' if you include any header files that |
| rely on ANSI C features. Some vendors are starting to ship |
| systems with ANSI C header files and you cannot use `-traditional' |
| on such systems to compile files that include any system headers. |
| |
| `-fsigned-bitfields' |
| `-funsigned-bitfields' |
| `-fno-signed-bitfields' |
| `-fno-unsigned-bitfields' |
| These options control whether a bitfield is signed or unsigned, |
| when the declaration does not use either `signed' or `unsigned'. |
| By default, such a bitfield is signed, because this is consistent: |
| the basic integer types such as `int' are signed types. |
| |
| However, when `-traditional' is used, bitfields are all unsigned |
| no matter what. |
| |
| `-fwritable-strings' |
| Store string constants in the writable data segment and don't |
| uniquize them. This is for compatibility with old programs which |
| assume they can write into string constants. The option |
| `-traditional' also has this effect. |
| |
| Writing into string constants is a very bad idea; "constants" |
| should be constant. |
| |
| `-fallow-single-precision' |
| Do not promote single precision math operations to double |
| precision, even when compiling with `-traditional'. |
| |
| Traditional K&R C promotes all floating point operations to double |
| precision, regardless of the sizes of the operands. On the |
| architecture for which you are compiling, single precision may be |
| faster than double precision. If you must use `-traditional', |
| but want to use single precision operations when the operands are |
| single precision, use this option. This option has no effect |
| when compiling with ANSI or GNU C conventions (the default). |
| |
| |
| File: gcc.info, Node: C++ Dialect Options, Next: Warning Options, Prev: C Dialect Options, Up: Invoking GCC |
| |
| Options Controlling C++ Dialect |
| =============================== |
| |
| This section describes the command-line options that are only |
| meaningful for C++ programs; but you can also use most of the GNU |
| compiler options regardless of what language your program is in. For |
| example, you might compile a file `firstClass.C' like this: |
| |
| g++ -g -felide-constructors -O -c firstClass.C |
| |
| In this example, only `-felide-constructors' is an option meant only |
| for C++ programs; you can use the other options with any language |
| supported by GNU CC. |
| |
| Here is a list of options that are *only* for compiling C++ programs: |
| |
| `-fno-access-control' |
| Turn off all access checking. This switch is mainly useful for |
| working around bugs in the access control code. |
| |
| `-fall-virtual' |
| Treat all possible member functions as virtual, implicitly. All |
| member functions (except for constructor functions and `new' or |
| `delete' member operators) are treated as virtual functions of the |
| class where they appear. |
| |
| This does not mean that all calls to these member functions will |
| be made through the internal table of virtual functions. Under |
| some circumstances, the compiler can determine that a call to a |
| given virtual function can be made directly; in these cases the |
| calls are direct in any case. |
| |
| `-fcheck-new' |
| Check that the pointer returned by `operator new' is non-null |
| before attempting to modify the storage allocated. The current |
| Working Paper requires that `operator new' never return a null |
| pointer, so this check is normally unnecessary. |
| |
| `-fconserve-space' |
| Put uninitialized or runtime-initialized global variables into the |
| common segment, as C does. This saves space in the executable at |
| the cost of not diagnosing duplicate definitions. If you compile |
| with this flag and your program mysteriously crashes after |
| `main()' has completed, you may have an object that is being |
| destroyed twice because two definitions were merged. |
| |
| `-fdollars-in-identifiers' |
| Accept `$' in identifiers. You can also explicitly prohibit use of |
| `$' with the option `-fno-dollars-in-identifiers'. (GNU C allows |
| `$' by default on most target systems, but there are a few |
| exceptions.) Traditional C allowed the character `$' to form part |
| of identifiers. However, ANSI C and C++ forbid `$' in identifiers. |
| |
| `-fenum-int-equiv' |
| Anachronistically permit implicit conversion of `int' to |
| enumeration types. Current C++ allows conversion of `enum' to |
| `int', but not the other way around. |
| |
| `-fexternal-templates' |
| Cause template instantiations to obey `#pragma interface' and |
| `implementation'; template instances are emitted or not according |
| to the location of the template definition. *Note Template |
| Instantiation::, for more information. |
| |
| This option is deprecated. |
| |
| `-falt-external-templates' |
| Similar to -fexternal-templates, but template instances are |
| emitted or not according to the place where they are first |
| instantiated. *Note Template Instantiation::, for more |
| information. |
| |
| This option is deprecated. |
| |
| `-ffor-scope' |
| `-fno-for-scope' |
| If -ffor-scope is specified, the scope of variables declared in a |
| for-init-statement is limited to the `for' loop itself, as |
| specified by the draft C++ standard. If -fno-for-scope is |
| specified, the scope of variables declared in a for-init-statement |
| extends to the end of the enclosing scope, as was the case in old |
| versions of gcc, and other (traditional) implementations of C++. |
| |
| The default if neither flag is given to follow the standard, but |
| to allow and give a warning for old-style code that would |
| otherwise be invalid, or have different behavior. |
| |
| `-fno-gnu-keywords' |
| Do not recognize `classof', `headof', `signature', `sigof' or |
| `typeof' as a keyword, so that code can use these words as |
| identifiers. You can use the keywords `__classof__', |
| `__headof__', `__signature__', `__sigof__', and `__typeof__' |
| instead. `-ansi' implies `-fno-gnu-keywords'. |
| |
| `-fguiding-decls' |
| Treat a function declaration with the same type as a potential |
| function template instantiation as though it declares that |
| instantiation, not a normal function. If a definition is given |
| for the function later in the translation unit (or another |
| translation unit if the target supports weak symbols), that |
| definition will be used; otherwise the template will be |
| instantiated. This behavior reflects the C++ language prior to |
| September 1996, when guiding declarations were removed. |
| |
| This option implies `-fname-mangling-version-0', and will not work |
| with other name mangling versions. |
| |
| `-fno-implicit-templates' |
| Never emit code for templates which are instantiated implicitly |
| (i.e. by use); only emit code for explicit instantiations. *Note |
| Template Instantiation::, for more information. |
| |
| `-fhandle-signatures' |
| Recognize the `signature' and `sigof' keywords for specifying |
| abstract types. The default (`-fno-handle-signatures') is not to |
| recognize them. *Note Type Abstraction using Signatures: C++ |
| Signatures. |
| |
| `-fhuge-objects' |
| Support virtual function calls for objects that exceed the size |
| representable by a `short int'. Users should not use this flag by |
| default; if you need to use it, the compiler will tell you so. If |
| you compile any of your code with this flag, you must compile |
| *all* of your code with this flag (including libg++, if you use |
| it). |
| |
| This flag is not useful when compiling with -fvtable-thunks. |
| |
| `-fno-implement-inlines' |
| To save space, do not emit out-of-line copies of inline functions |
| controlled by `#pragma implementation'. This will cause linker |
| errors if these functions are not inlined everywhere they are |
| called. |
| |
| `-fmemoize-lookups' |
| `-fsave-memoized' |
| Use heuristics to compile faster. These heuristics are not |
| enabled by default, since they are only effective for certain |
| input files. Other input files compile more slowly. |
| |
| The first time the compiler must build a call to a member function |
| (or reference to a data member), it must (1) determine whether the |
| class implements member functions of that name; (2) resolve which |
| member function to call (which involves figuring out what sorts of |
| type conversions need to be made); and (3) check the visibility of |
| the member function to the caller. All of this adds up to slower |
| compilation. Normally, the second time a call is made to that |
| member function (or reference to that data member), it must go |
| through the same lengthy process again. This means that code like |
| this: |
| |
| cout << "This " << p << " has " << n << " legs.\n"; |
| |
| makes six passes through all three steps. By using a software |
| cache, a "hit" significantly reduces this cost. Unfortunately, |
| using the cache introduces another layer of mechanisms which must |
| be implemented, and so incurs its own overhead. |
| `-fmemoize-lookups' enables the software cache. |
| |
| Because access privileges (visibility) to members and member |
| functions may differ from one function context to the next, G++ |
| may need to flush the cache. With the `-fmemoize-lookups' flag, |
| the cache is flushed after every function that is compiled. The |
| `-fsave-memoized' flag enables the same software cache, but when |
| the compiler determines that the context of the last function |
| compiled would yield the same access privileges of the next |
| function to compile, it preserves the cache. This is most helpful |
| when defining many member functions for the same class: with the |
| exception of member functions which are friends of other classes, |
| each member function has exactly the same access privileges as |
| every other, and the cache need not be flushed. |
| |
| The code that implements these flags has rotted; you should |
| probably avoid using them. |
| |
| `-fstrict-prototype' |
| Within an `extern "C"' linkage specification, treat a function |
| declaration with no arguments, such as `int foo ();', as declaring |
| the function to take no arguments. Normally, such a declaration |
| means that the function `foo' can take any combination of |
| arguments, as in C. `-pedantic' implies `-fstrict-prototype' |
| unless overridden with `-fno-strict-prototype'. |
| |
| This flag no longer affects declarations with C++ linkage. |
| |
| `-fname-mangling-version-N' |
| Control the way in which names are mangled. Version 0 is |
| compatible with versions of g++ before 2.8. Version 1 is the |
| default. Version 1 will allow correct mangling of function |
| templates. For example, version 0 mangling does not mangle |
| foo<int, double> and foo<int, char> given this declaration: |
| |
| template <class T, class U> void foo(T t); |
| |
| `-fno-nonnull-objects' |
| Don't assume that a reference is initialized to refer to a valid |
| object. Although the current C++ Working Paper prohibits null |
| references, some old code may rely on them, and you can use |
| `-fno-nonnull-objects' to turn on checking. |
| |
| At the moment, the compiler only does this checking for |
| conversions to virtual base classes. |
| |
| `-foperator-names' |
| Recognize the operator name keywords `and', `bitand', `bitor', |
| `compl', `not', `or' and `xor' as synonyms for the symbols they |
| refer to. `-ansi' implies `-foperator-names'. |
| |
| `-fthis-is-variable' |
| Permit assignment to `this'. The incorporation of user-defined |
| free store management into C++ has made assignment to `this' an |
| anachronism. Therefore, by default it is invalid to assign to |
| `this' within a class member function; that is, GNU C++ treats |
| `this' in a member function of class `X' as a non-lvalue of type |
| `X *'. However, for backwards compatibility, you can make it |
| valid with `-fthis-is-variable'. |
| |
| `-fvtable-thunks' |
| Use `thunks' to implement the virtual function dispatch table |
| (`vtable'). The traditional (cfront-style) approach to |
| implementing vtables was to store a pointer to the function and two |
| offsets for adjusting the `this' pointer at the call site. Newer |
| implementations store a single pointer to a `thunk' function which |
| does any necessary adjustment and then calls the target function. |
| |
| This option also enables a heuristic for controlling emission of |
| vtables; if a class has any non-inline virtual functions, the |
| vtable will be emitted in the translation unit containing the |
| first one of those. |
| |
| `-ftemplate-depth-N' |
| Set the maximum instantiation depth for template classes to N. A |
| limit on the template instantiation depth is needed to detect |
| endless recursions during template class instantiation. ANSI/ISO |
| C++ conforming programs must not rely on a maximum depth greater |
| than 17. |
| |
| `-nostdinc++' |
| Do not search for header files in the standard directories |
| specific to C++, but do still search the other standard |
| directories. (This option is used when building libg++.) |
| |
| `-traditional' |
| For C++ programs (in addition to the effects that apply to both C |
| and C++), this has the same effect as `-fthis-is-variable'. *Note |
| Options Controlling C Dialect: C Dialect Options. |
| |
| In addition, these optimization, warning, and code generation options |
| have meanings only for C++ programs: |
| |
| `-fno-default-inline' |
| Do not assume `inline' for functions defined inside a class scope. |
| *Note Options That Control Optimization: Optimize Options. |
| |
| `-Wold-style-cast' |
| `-Woverloaded-virtual' |
| `-Wtemplate-debugging' |
| Warnings that apply only to C++ programs. *Note Options to |
| Request or Suppress Warnings: Warning Options. |
| |
| `-Weffc++' |
| Warn about violation of some style rules from Effective C++ by |
| Scott Myers. |
| |
| `+eN' |
| Control how virtual function definitions are used, in a fashion |
| compatible with `cfront' 1.x. *Note Options for Code Generation |
| Conventions: Code Gen Options. |
| |