diff options
Diffstat (limited to 'gcc/gcc.info-1')
-rw-r--r-- | gcc/gcc.info-1 | 1154 |
1 files changed, 0 insertions, 1154 deletions
diff --git a/gcc/gcc.info-1 b/gcc/gcc.info-1 deleted file mode 100644 index 12ce102eabb..00000000000 --- a/gcc/gcc.info-1 +++ /dev/null @@ -1,1154 +0,0 @@ -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 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.7.2. - -* 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 -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 - - *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* - -m486 -m386 -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 - -mieee -mieee-with-inexact -mieee-conformant - -mfp-trap-mode -mfp-rounding-mode -mtrap-precision - -mbuild-constants - - *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 -fpic -fPIC - -freg-struct-return -fshared-data -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. - -`-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. - |