msp430-gcc (1) Linux Manual Page
NAME
gcc – GNU project C and C++ compiler
SYNOPSIS
gcc [-c|-S|-E] [-std=standard]
-g] -pg] -Olevel]
-Wwarn…] -pedantic]
-Idir…] -Ldir…]
-Dmacro[=defn]…] -Umacro]
-foption…] -mmachine-option…]
-o
Only the most useful options are listed here; see below for the remainder. g++ accepts mostly the same options as gcc.
DESCRIPTION
When you invoke GCC, 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 GCC 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.
The gcc program accepts options and file names as operands. Many options have multi-letter 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.
OPTIONS
Option Summary
Here is a summary of all the options, grouped by type. Explanations are in the following sections.
- Overall Options
-
-c -S -E -ofile-pipe -pass-exit-codes -xlanguage-v -### –help –target-help –version - C Language Options
-
-ansi -std=standard-aux-infofilename-fno-asm -fno-builtin -fno-builtin-function-fhosted -ffreestanding -trigraphs -no-integrated-cpp -traditional -traditional-cpp -fallow-single-precision -fcond-mismatch -fsigned-bitfields -fsigned-char -funsigned-bitfields -funsigned-char -fwritable-strings - C++ Language Options
-
-fno-access-control -fcheck-new -fconserve-space -fno-const-strings -fdollars-in-identifiers -fno-elide-constructors -fno-enforce-eh-specs -fexternal-templates -falt-external-templates -ffor-scope -fno-for-scope -fno-gnu-keywords -fno-implicit-templates -fno-implicit-inline-templates -fno-implement-inlines -fms-extensions -fno-nonansi-builtins -fno-operator-names -fno-optional-diags -fpermissive -frepo -fno-rtti -fstats -ftemplate-depth-n-fuse-cxa-atexit -fvtable-gc -fno-weak -nostdinc++ -fno-default-inline -Wabi -Wctor-dtor-privacy -Wnon-virtual-dtor -Wreorder -Weffc++ -Wno-deprecated -Wno-non-template-friend -Wold-style-cast -Woverloaded-virtual -Wno-pmf-conversions -Wsign-promo -Wsynth - Objective-C Language Options
-
-fconstant-string-class=class-name-fgnu-runtime -fnext-runtime -gen-decls -Wno-protocol -Wselector - Language Independent Options
-
-fmessage-length=n-fdiagnostics-show-location=[once|every-line] - Warning Options
-
-fsyntax-only -pedantic -pedantic-errors -w -W -Wall -Waggregate-return -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment -Wconversion -Wno-deprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Werror -Wfloat-equal -Wformat -Wformat=2 -Wformat-nonliteral -Wformat-security -Wimplicit -Wimplicit-int -Wimplicit-function-declaration -Werror-implicit-function-declaration -Wimport -Winline -Wlarger-than-len-Wlong-long -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmissing-noreturn -Wmultichar -Wno-format-extra-args -Wno-format-y2k -Wno-import -Wpacked -Wpadded -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wsystem-headers -Wtrigraphs -Wundef -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings - C-only Warning Options
-
-Wbad-function-cast -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wstrict-prototypes -Wtraditional - Debugging Options
-
-dletters-dumpspecs -dumpmachine -dumpversion -fdump-unnumbered -fdump-translation-unit[–n]-fdump-class-hierarchy[–n]-fdump-tree-original[–n]-fdump-tree-optimized[–n]-fdump-tree-inlined[–n]-fmem-report -fpretend-float -fprofile-arcs -fsched-verbose=n-ftest-coverage -ftime-report -g -glevel-gcoff -gdwarf -gdwarf-1 -gdwarf-1+ -gdwarf-2 -ggdb -gstabs -gstabs+ -gvms -gxcoff -gxcoff+ -p -pg -print-file-name=library-print-libgcc-file-name -print-multi-directory -print-multi-lib -print-prog-name=program-print-search-dirs -Q -save-temps -time - Optimization Options
-
-falign-functions=n-falign-jumps=n-falign-labels=n-falign-loops=n-fbounds-check -fbranch-probabilities -fcaller-saves -fcprop-registers -fcse-follow-jumps -fcse-skip-blocks -fdata-sections -fdelayed-branch -fdelete-null-pointer-checks -fexpensive-optimizations -ffast-math -ffloat-store -fforce-addr -fforce-mem -ffunction-sections -fgcse -fgcse-lm -fgcse-sm -finline-functions -finline-limit=n-fkeep-inline-functions -fkeep-static-consts -fmerge-constants -fmerge-all-constants -fmove-all-movables -fno-branch-count-reg -fno-default-inline -fno-defer-pop -fno-function-cse -fno-guess-branch-probability -fno-inline -fno-math-errno -fno-peephole -fno-peephole2 -funsafe-math-optimizations -fno-trapping-math -fomit-frame-pointer -foptimize-register-move -foptimize-sibling-calls -fprefetch-loop-arrays -freduce-all-givs -fregmove -frename-registers -frerun-cse-after-loop -frerun-loop-opt -fschedule-insns -fschedule-insns2 -fno-sched-interblock -fno-sched-spec -fsched-spec-load -fsched-spec-load-dangerous -fsingle-precision-constant -fssa -fssa-ccp -fssa-dce -fstrength-reduce -fstrict-aliasing -fthread-jumps -ftrapv -funroll-all-loops -funroll-loops –paramname=value-O -O0 -O1 -O2 -O3 -Os - Preprocessor Options
-
-$ -Aquestion=answer-A-question[=answer]-C -dD -dI -dM -dN -Dmacro[=defn]-E -H -idirafterdir-includefile-imacrosfile-iprefixfile-iwithprefixdir-iwithprefixbeforedir-isystemdir-M -MM -MF -MG -MP -MQ -MT -nostdinc -P -remap -trigraphs -undef -Umacro-Wp,option - Assembler Option
-
-Wa,option - Linker Options
- object-file-name
-llibrary-nostartfiles -nodefaultlibs -nostdlib -s -static -static-libgcc -shared -shared-libgcc -symbolic -Wl,option-Xlinkeroption-usymbol - Directory Options
-
-Bprefix-Idir-I- -Ldir-specs=file - Target Options
-
-bmachine-Vversion - Machine Dependent Options
- M680x0 Options
-m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m68881 -mbitfield -mc68000 -mc68020 -mfpa -mnobitfield -mrtd -mshort -msoft-float -mpcrel -malign-int -mstrict-alignM68hc1x Options
-m6811 -m6812 -m68hc11 -m68hc12 -mauto-incdec -mshort -msoft-reg-count=countVAX Options
-mg -mgnu -munixSPARC Options
-mcpu=cpu-type-mtune=cpu-type-mcmodel=code-model-m32 -m64 -mapp-regs -mbroken-saverestore -mcypress -mfaster-structs -mflat -mfpu -mhard-float -mhard-quad-float -mimpure-text -mlive-g0 -mno-app-regs -mno-faster-structs -mno-flat -mno-fpu -mno-impure-text -mno-stack-bias -mno-unaligned-doubles -msoft-float -msoft-quad-float -msparclite -mstack-bias -msupersparc -munaligned-doubles -mv8Convex Options
-mc1 -mc2 -mc32 -mc34 -mc38 -margcount -mnoargcount -mlong32 -mlong64 -mvolatile-cache -mvolatile-nocacheAMD29K 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-registersARM Options
-mapcs-frame -mno-apcs-frame -mapcs-26 -mapcs-32 -mapcs-stack-check -mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-reentrant -mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian -mwords-little-endian -malignment-traps -mno-alignment-traps -msoft-float -mhard-float -mfpe -mthumb-interwork -mno-thumb-interwork -mcpu=name-march=name-mfpe=name-mstructure-size-boundary=n-mbsd -mxopen -mno-symrename -mabort-on-noreturn -mlong-calls -mno-long-calls -msingle-pic-base -mno-single-pic-base -mpic-register=reg-mnop-fun-dllimport -mpoke-function-name -mthumb -marm -mtpcs-frame -mtpcs-leaf-frame -mcaller-super-interworking -mcallee-super-interworkingMN10200 Options
-mrelaxMN10300 Options
-mmult-bug -mno-mult-bug -mam33 -mno-am33 -mno-crt0 -mrelaxM32R/D Options
-m32rx -m32r -mcode-model=model-type-msdata=sdata-type-GnumM88K 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-structsRS/6000 and PowerPC Options
-mcpu=cpu-type-mtune=cpu-type-mpower -mno-power -mpower2 -mno-power2 -mpowerpc -mpowerpc64 -mno-powerpc -maltivec -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt -mnew-mnemonics -mold-mnemonics -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc -m64 -m32 -mxl-call -mno-xl-call -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 -mlittle -mlittle-endian -mbig -mbig-endian -mcall-aix -mcall-sysv -mcall-netbsd -maix-struct-return -msvr4-struct-return -mabi=altivec -mabi=no-altivec -mprototype -mno-prototype -msim -mmvme -mads -myellowknife -memb -msdata -msdata=opt-mvxworks -Gnum-pthreadRT 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-returnMIPS Options
-mabicalls -march=cpu-type-mtune=cpu=type-mcpu=cpu-type-membedded-data -muninit-const-in-rodata -membedded-pic -mfp32 -mfp64 -mfused-madd -mno-fused-madd -mgas -mgp32 -mgp64 -mgpopt -mhalf-pic -mhard-float -mint64 -mips1 -mips2 -mips3 -mips4 -mlong64 -mlong32 -mlong-calls -mmemcpy -mmips-as -mmips-tfile -mno-abicalls -mno-embedded-data -mno-uninit-const-in-rodata -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 -Gnum-nocpp -mabi=32 -mabi=n32 -mabi=64 -mabi=eabi -mfix7000 -mno-crt0 -mflush-func=func-mno-flush-funci386 and x86-64 Options
-mcpu=cpu-type-march=cpu-type-mfpmath=unit-masm=dialect-mno-fancy-math-387 -mno-fp-ret-in-387 -msoft-float -msvr3-shlib -mno-wide-multiply -mrtd -malign-double -mpreferred-stack-boundary=num-mmmx -msse -msse2 -m3dnow -mthreads -mno-align-stringops -minline-all-stringops -mpush-args -maccumulate-outgoing-args -m128bit-long-double -m96bit-long-double -mregparm=num-momit-leaf-frame-pointer -mno-red-zone -mcmodel=code-model-m32 -m64HPPA Options
-march=architecture-type-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-regs -msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime -mschedule=cpu-type-mspace-regsIntel 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-callDEC Alpha Options
-mno-fp-regs -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-mtune=cpu-type-mbwx -mmax -mfix -mcix -mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data -mlarge-data -mmemory-latency=timeDEC Alpha/VMS Options
-mvms-return-codesClipper Options
-mc300 -mc400H8/300 Options
-mrelax -mh -ms -mint32 -malign-300SH Options
-m1 -m2 -m3 -m3e -m4-nofpu -m4-single-only -m4-single -m4 -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-compact -m5-compact-nofpu -mb -ml -mdalign -mrelax -mbigtable -mfmovd -mhitachi -mnomacsave -mieee -misize -mpadstruct -mspace -mprefergot -musermodeSystem V Options
-Qy -Qn -YP,paths-Ym,dirARC Options
-EB -EL -mmangle-cpu -mcpu=cpu-mtext=text-section-mdata=data-section-mrodata=readonly-data-sectionTMS320C3x/C4x Options
-mcpu=cpu-mbig -msmall -mregparm -mmemparm -mfast-fix -mmpyi -mbk -mti -mdp-isr-reload -mrpts=count-mrptb -mdb -mloop-unsigned -mparallel-insns -mparallel-mpy -mpreserve-floatV850 Options
-mlong-calls -mno-long-calls -mep -mno-ep -mprolog-function -mno-prolog-function -mspace -mtda=n-msda=n-mzda=n-mv850 -mbig-switchNS32K Options
-m32032 -m32332 -m32532 -m32081 -m32381 -mmult-add -mnomult-add -msoft-float -mrtd -mnortd -mregparam -mnoregparam -msb -mnosb -mbitfield -mnobitfield -mhimem -mnohimemAVR Options
-mmcu=mcu-msize -minit-stack=n-mno-interrupts -mcall-prologues -mno-tablejump -mtiny-stackMCore Options
-mhardlit -mno-hardlit -mdiv -mno-div -mrelax-immediates -mno-relax-immediates -mwide-bitfields -mno-wide-bitfields -m4byte-functions -mno-4byte-functions -mcallgraph-data -mno-callgraph-data -mslow-bytes -mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -m210 -m340 -mstack-incrementMMIX Options
-mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu -mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols -melf -mbranch-predict -mno-branch-predict -mbase-addresses -mno-base-addressesIA-64 Options
-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic -mvolatile-asm-stop -mb-step -mregister-names -mno-sdata -mconstant-gp -mauto-pic -minline-divide-min-latency -minline-divide-max-throughput -mno-dwarf2-asm -mfixed-range=register-rangeD30V Options
-mextmem -mextmemory -monchip -mno-asm-optimize -masm-optimize -mbranch-cost=n-mcond-exec=nS/390 and zSeries Options
-mhard-float -msoft-float -mbackchain -mno-backchain -msmall-exec -mno-small-exec -mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debugCRIS Options
-mcpu=cpu-march=cpu-mtune=cpu-mmax-stack-frame=n-melinux-stacksize=n-metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects -mstack-align -mdata-align -mconst-align -m32-bit -m16-bit -m8-bit -mno-prologue-epilogue -mno-gotplt -melf -maout -melinux -mlinux -sim -sim2PDP-11 Options
-mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy -mbcopy-builtin -mint32 -mno-int16 -mint16 -mno-int32 -mfloat32 -mno-float64 -mfloat64 -mno-float32 -mabshi -mno-abshi -mbranch-expensive -mbranch-cheap -msplit -mno-split -munix-asm -mdec-asmXstormy16 Options
-msimXtensa Options
-mbig-endian -mlittle-endian -mdensity -mno-density -mmac16 -mno-mac16 -mmul16 -mno-mul16 -mmul32 -mno-mul32 -mnsa -mno-nsa -mminmax -mno-minmax -msext -mno-sext -mbooleans -mno-booleans -mhard-float -msoft-float -mfused-madd -mno-fused-madd -mserialize-volatile -mno-serialize-volatile -mtext-section-literals -mno-text-section-literals -mtarget-align -mno-target-align -mlongcalls -mno-longcalls - Code Generation Options
-
-fcall-saved-reg-fcall-used-reg-ffixed-reg-fexceptions -fnon-call-exceptions -funwind-tables -fasynchronous-unwind-tables -finhibit-size-directive -finstrument-functions -fno-common -fno-ident -fno-gnu-linker -fpcc-struct-return -fpic -fPIC -freg-struct-return -fshared-data -fshort-enums -fshort-double -fshort-wchar -fvolatile -fvolatile-global -fvolatile-static -fverbose-asm -fpack-struct -fstack-check -fstack-limit-register=reg-fstack-limit-symbol=sym-fargument-alias -fargument-noalias -fargument-noalias-global -fleading-underscore
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
.mi - Objective-C source code which should not be preprocessed.
- file
.h - C header file (not to be compiled or linked).
- file
.cc - file
.cp - file
.cxx - file
.cpp - file
.c++ - file
.C - C++ source code which must be preprocessed. Note that in
.cxx, the last two letters must both be literallyx. Likewise,.Crefers to a literal capital C. - file
.f - file
.for - file
.FOR - Fortran source code which should not be preprocessed.
- file
.F - file
.fpp - file
.FPP - Fortran source code which must be preprocessed (with the traditional preprocessor).
- file
.r - Fortran source code which must be preprocessed with a RATFOR preprocessor (not included with GCC).
- file
.ads - Ada source code file which contains a library unit declaration (a declaration of a package, subprogram, or generic, or a generic instantiation), or a library unit renaming declaration (a package, generic, or subprogram renaming declaration). Such files are also called specs.
- file
.adb - Ada source code file containing a library unit body (a subprogram or package body). Such files are also called bodies.
- 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:
-xlanguage- 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
-xoption. Possible values for language are:c c-header cpp-output c++ c++-cpp-output objective-c objc-cpp-output assembler assembler-with-cpp ada f77 f77-cpp-input ratfor java -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
-xhas not been used at all). -pass-exit-codes- Normally the
gccprogram will exit with the code of 1 if any phase of the compiler returns a non-success return code. If you specify-pass-exit-codes, thegccprogram will instead return with numerically highest error produced by any phase that returned an error indication.
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.
-ofile- 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
-owhen compiling more than one input file, unless you are producing an executable file as output.If
-ois 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.
-###- Like
-vexcept the commands are not executed and all command arguments are quoted. This is useful for shell scripts to capture the driver-generated command lines. -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.
—help- Print (on the standard output) a description of the command line options understood by
gcc. If the-voption is also specified then—helpwill also be passed on to the various processes invoked bygcc, so that they can display the command line options they accept. If the-Woption is also specified then command line options which have no documentation associated with them will also be displayed. —target-help- Print (on the standard output) a description of target specific command line options for each tool.
—version- Display the version number and copyrights of the invoked GCC.
Compiling C++ Programs
C++ source files conventionally use one of the suffixes .C, .cc, .cpp, .c++, .cp, or .cxx; preprocessed C++ files use the suffix .ii. GCC 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 GCC with the default language set to C++, and automatically specifies linking against the C++ library. On many systems, 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.
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- In C mode, support all ISO C89 programs. In C++ mode, remove GNU extensions that conflict with ISO C++.
This turns off certain features of GCC that are incompatible with ISO C89 (when compiling C code), or of standard C++ (when compiling C++ code), such as the "asm" 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 ISO trigraph feature. For the C compiler, it disables recognition of C++ style
//comments as well as the "inline" keyword.The alternate keywords "__asm__", "__extension__", "__inline__" and "__typeof__" continue to work despite
-ansi. You would not want to use them in an ISO 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
-ansioption does not cause non-ISO programs to be rejected gratuitously. For that,-pedanticis required in addition to-ansi.The macro "__STRICT_ANSI__" is predefined when the
-ansioption is used. Some header files may notice this macro and refrain from declaring certain functions or defining certain macros that the ISO standard doesn’t call for; this is to avoid interfering with any programs that might use these names for other things.Functions which would normally be built in but do not have semantics defined by ISO C (such as "alloca" and "ffs") are not built-in functions with
-ansiis used. -std=- Determine the language standard. This option is currently only supported when compiling C. A value for this option must be provided; possible values are
-
c89iso9899:1990- ISO C89 (same as
-ansi). iso9899:199409- ISO C89 as modified in amendment 1.
c99c9xiso9899:1999iso9899:199x- ISO C99. Note that this standard is not yet fully supported; see <
http://gcc.gnu.org/gcc-3.1/c99status.html> for more information. The namesc9xandiso9899:199xare deprecated. gnu89- Default, ISO C89 plus GNU extensions (including some C99 features).
gnu99gnu9x- ISO C99 plus GNU extensions. When ISO C99 is fully implemented in GCC, this will become the default. The name
gnu9xis deprecated.
-
Even when this option is not specified, you can still use some of the features of newer standards in so far as they do not conflict with previous C standards. For example, you may use "__restrict__" even when
-std=c99is not specified.The
-stdoptions specifying some version of ISO C have the same effects as-ansi, except that features that were not in ISO C89 but are in the specified version (for example,//comments and the "inline" keyword in ISO C99) are not disabled.
-aux-infofilename- Output to the given filename prototyped declarations for all functions declared and/or defined in a translation unit, including those in header files. This option is silently ignored in any language other than C.
Besides declarations, the file indicates, in comments, the origin of each declaration (source file and line), whether the declaration was implicit, prototyped or unprototyped (
I,Nfor new orOfor old, respectively, in the first character after the line number and the colon), and whether it came from a declaration or a definition (CorF, respectively, in the following character). In the case of function definitions, a K&R-style list of arguments followed by their declarations is also provided, inside comments, after the declaration. -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.
-ansiimplies-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-keywordsflag instead, which has the same effect. In C99 mode (-std=c99or-std=gnu99), this switch only affects the "asm" and "typeof" keywords, since "inline" is a standard keyword in ISO C99. -fno-builtin-fno-builtin-function(C and Objective-C only)- Don’t recognize built-in functions that do not begin with
__builtin_as prefix.GCC normally generates special code to handle certain built-in 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.
In C++,
-fno-builtinis always in effect. The-fbuiltinoption has no effect. Therefore, in C++, the only way to get the optimization benefits of built-in functions is to call the function using the__builtin_prefix. The GNU C++ Standard Library uses built-in functions to implement many functions (like "std::strchr"), so that you automatically get efficient code.With the
-fno-builtin-function option, not available when compiling C++, only the built-in function function is disabled. function must not begin with__builtin_. If a function is named this is not built-in in this version of GCC, this option is ignored. There is no corresponding-fbuiltin-function option; if you wish to enable built-in functions selectively when using-fno-builtinor-ffreestanding, you may define macros such as:#define abs(n) __builtin_abs((n)) #define strcpy(d, s) __builtin_strcpy((d), (s)) -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 ISO C trigraphs. The
-ansioption (and-stdoptions for strict ISO C conformance) implies-trigraphs. -no-integrated-cpp- Invoke the external cpp during compilation. The default is to use the integrated cpp (internal cpp). This option also allows a user-supplied cpp via the
-Boption. This flag is applicable in both C and C++ modes.We do not guarantee to retain this option in future, and we may change its semantics.
-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 ISO 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 ISO C: automatic variables not declared "volatile" may be clobbered.
- *
- The character escape sequences
