GCC(1)                              GNU Tools                             GCC(1)

       gcc, g++ - GNU project C and C++ Compiler (gcc-2.95)

       gcc [ option | filename ]...
       g++ [ option | filename ]...

       The information in this man page is an extract from the full
       documentation of the GNU C compiler, and is limited to the meaning of the

       This man page is not kept up to date except when volunteers want to
       maintain it.  If you find a discrepancy between the man page and the
       software, please check the Info file, which is the authoritative

       If we find that the things in this man page that are out of date cause
       significant confusion or complaints, we will stop distributing the man
       page.  The alternative, updating the man page when we update the Info
       file, is impossible because the rest of the work of maintaining GNU CC
       leaves us no time for that.  The GNU project regards man pages as
       obsolete and should not let them take time away from other things.

       For complete and current documentation, refer to the Info file `gcc' or
       the manual Using and Porting GNU CC (for version 2.0).  Both are made
       from the Texinfo source file gcc.texinfo.

       The C and C++ compilers are integrated.  Both process input files through
       one or more of four stages: preprocessing, compilation, assembly, and
       linking.  Source filename suffixes identify the source language, but
       which name you use for the compiler governs default assumptions:

       gcc    assumes preprocessed (.i) files are C and assumes C style linking.

       g++    assumes preprocessed (.i) files are C++ and assumes C++ style

       Suffixes of source file names indicate the language and kind of
       processing to be done:

       .c    C source; preprocess, compile, assemble
       .C    C++ source; preprocess, compile, assemble
       .cc   C++ source; preprocess, compile, assemble
       .cxx  C++ source; preprocess, compile, assemble
       .m    Objective-C source; preprocess, compile, assemble
       .i    preprocessed C; compile, assemble
       .ii   preprocessed C++; compile, assemble
       .s    Assembler source; assemble
       .S    Assembler source; preprocess, assemble
       .h    Preprocessor file; not usually named on command line

       Files with other suffixes are passed to the linker.  Common cases

       .o    Object file
       .a    Archive file

       Linking is always the last stage unless you use one of the -c, -S, or -E
       options to avoid it (or unless compilation errors stop the whole
       process).  For the link stage, all .o files corresponding to source
       files, -l libraries, unrecognized filenames (including named .o object
       files and .a archives) are passed to the linker in command-line order.

       Options must be separate: `-dr' is quite different from `-d -r '.

       Most `-f' and `-W' options have two contrary forms: -fname and -fno-name
       (or -Wname and -Wno-name).  Only the non-default forms are shown here.

       Here is a summary of all the options, grouped by type.  Explanations are
       in the following sections.

       Overall Options
              -c -S -E -o file -pipe -v -x language

       Language Options
              -ansi -fall-virtual -fcond-mismatch -fdollars-in-identifiers
              -fenum-int-equiv -fexternal-templates -fno-asm -fno-builtin
              -fhosted -fno-hosted -ffreestanding -fno-freestanding
              -fno-strict-prototype -fsigned-bitfields -fsigned-char
              -fthis-is-variable -funsigned-bitfields -funsigned-char
              -fwritable-strings -traditional -traditional-cpp -trigraphs

       Warning Options
              -fsyntax-only -pedantic -pedantic-errors -w -W -Wall
              -Waggregate-return -Wcast-align -Wcast-qual -Wchar-subscript
              -Wcomment -Wconversion -Wenum-clash -Werror -Wformat
              -Wid-clash-len -Wimplicit -Wimplicit-int
              -Wimplicit-function-declaration -Winline -Wlong-long -Wmain
              -Wmissing-prototypes -Wmissing-declarations -Wnested-externs
              -Wno-import -Wparentheses -Wpointer-arith -Wredundant-decls
              -Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch
              -Wtemplate-debugging -Wtraditional -Wtrigraphs -Wuninitialized
              -Wunused -Wwrite-strings

       Debugging Options
              -a -dletters -fpretend-float -g -glevel -gcoff -gxcoff -gxcoff+
              -gdwarf -gdwarf+ -gstabs -gstabs+ -ggdb -p -pg -save-temps
              -print-file-name=library -print-libgcc-file-name

       Optimization Options
              -fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
              -fdelayed-branch -felide-constructors -fexpensive-optimizations
              -ffast-math -ffloat-store -fforce-addr -fforce-mem
              -finline-functions -fkeep-inline-functions -fmemoize-lookups
              -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 -O2 -O3

       Preprocessor Options
              -Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H -idirafter dir
              -include file -imacros file -iprefix file -iwithprefix dir -M -MD
              -MM -MMD -nostdinc -P -Umacro -undef

       Assembler Option

       Linker Options
              -llibrary -nostartfiles -nostdlib -static -shared -symbolic
              -Xlinker option -Wl,option -u symbol

       Directory Options
              -Bprefix -Idir -I- -Ldir

       Target Options
              -b  machine -V version

       Configuration Dependent Options
              M680x0 Options
              -m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881 -mbitfield
              -mc68000 -mc68020 -mfpa -mnobitfield -mrtd -mshort -msoft-float

              VAX Options
              -mg -mgnu -munix

              SPARC Options
              -mepilogue -mfpu -mhard-float -mno-fpu -mno-epilogue -msoft-float
              -msparclite -mv8 -msupersparc -mcypress

              Convex Options
              -margcount -mc1 -mc2 -mnoargcount

              AMD29K Options
              -m29000 -m29050 -mbw -mdw -mkernel-registers -mlarge -mnbw -mnodw
              -msmall -mstack-check -muser-registers

              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

              RS6000 Options
              -mfp-in-toc -mno-fop-in-toc

              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
              -mcpu=cpu type -mips2 -mips3 -mint64 -mlong64 -mlonglong128
              -mmips-as -mgas -mrnames -mno-rnames -mgpopt -mno-gpopt -mstats
              -mno-stats -mmemcpy -mno-memcpy -mno-mips-tfile -mmips-tfile
              -msoft-float -mhard-float -mabicalls -mno-abicalls -mhalf-pic
              -mno-half-pic -G num -nocpp

              i386 Options
              -m486 -mno-486 -msoft-float -mno-fp-ret-in-387

              HPPA Options
              -mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
              -mno-shared-libs -mlong-calls -mdisable-fpregs -mdisable-indexing

              i960 Options
              -mcpu-type -mnumerics -msoft-float -mleaf-procedures
              -mno-leaf-procedures -mtail-call -mno-tail-call -mcomplex-addr
              -mno-complex-addr -mcode-align -mno-code-align -mic-compat
              -mic2.0-compat -mic3.0-compat -masm-compat -mintel-asm
              -mstrict-align -mno-strict-align -mold-align -mno-old-align

              DEC Alpha Options
              -mfp-regs -mno-fp-regs -mno-soft-float -msoft-float

              System V Options
              -G -Qy -Qn -YP,paths -Ym,dir

       Code Generation Options
              -fcall-saved-reg -fcall-used-reg -ffixed-reg
              -finhibit-size-directive -fnonnull-objects -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

       -x language
              Specify explicitly the language for the following input files
              (rather than choosing a default based on the file name suffix) .
              This option applies to all following input files until the next
              `-x' option.  Possible values of language are `c', `objective-c',
              `c-header', `c++', `cpp-output', `assembler', and

       -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 want only some of the four stages (preprocess, compile, assemble,
       link), 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
              compiler output is an object file corresponding to each source

              By default, GCC makes the object file name for a source file by
              replacing the suffix `.c', `.i', `.s', etc., with `.o'.  Use -o to
              select another name.

              GCC ignores any unrecognized input files (those that do not
              require compilation or assembly) with the -c option.

       -S     Stop after the stage of compilation proper; do not assemble.  The
              output is an assembler code file for each non-assembler input file

              By default, GCC makes the assembler file name for a source file by
              replacing the suffix `.c', `.i', etc., with `.s'.  Use -o to
              select another name.

              GCC ignores any input files that don't require compilation.

       -E     Stop after the preprocessing stage; do not run the compiler
              proper.  The output is preprocessed source code, which is sent to
              the standard output.

              GCC ignores input files which don't require preprocessing.

       -o file
              Place output in file file.  This applies regardless to whatever
              sort of output GCC is producing, 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 you do not specify `-o', 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

       -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 cannot read from a pipe; but the GNU
              assembler has no trouble.

       The following options control the dialect of 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 disallows `$' as part of

              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

              The preprocessor predefines a macro __STRICT_ANSI__ when you use
              the `-ansi' option.  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

              Do not recognize asm, inline or typeof as a keyword.  These words
              may then be used as identifiers.  You can use __asm__, __inline__
              and __typeof__ instead.  `-ansi' implies `-fno-asm'.

              Don't recognize built-in functions that do not begin with two
              leading underscores.  Currently, the functions affected include
              _exit, abort, abs, alloca, cos, exit, fabs, labs, memcmp, memcpy,
              sin, sqrt, strcmp, strcpy, and strlen.

              The `-ansi' option prevents alloca and _exit from being builtin

              Compile for a hosted environment; this implies the `-fbuiltin'
              option, and implies that suspicious declarations of main should be
              warned about.

              Compile for a freestanding environment; this implies the `-fno-
              builtin' option, and implies that main has no special

              Treat a function declaration with no arguments, such as `int foo
              ();', as C would treat it—as saying nothing about the number of
              arguments or their types (C++ only).  Normally, such a declaration
              in C++ means that the function foo takes no arguments.

              Support ANSI C trigraphs.  The `-ansi' option implies

              Attempt to support some aspects of traditional C compilers.  For
              details, see the GNU C Manual; the duplicate list here has been
              deleted so that we won't get complaints when it is out of date.

              But one note about C++ programs only (not C).  `-traditional' has
              one additional effect for C++: assignment to this is permitted.
              This is the same as the effect of `-fthis-is-variable'.

              Attempt to support some aspects of traditional C preprocessors.
              This includes the items that specifically mention the preprocessor
              above, but none of the other effects of `-traditional'.

              Permit the use of `$' in identifiers (C++ only).  You can also use
              `-fno-dollars-in-identifiers' to explicitly prohibit use of `$'.
              (GNU C++ allows `$' by default on some target systems but not

              Permit implicit conversion of int to enumeration types (C++ only).
              Normally GNU C++ allows conversion of enum to int, but not the
              other way around.

              Produce smaller code for template declarations, by generating only
              a single copy of each template function where it is defined (C++
              only).  To use this option successfully, you must also mark all
              files that use templates with either `#pragma implementation' (the
              definition) or `#pragma interface' (declarations).

              When your code is compiled with `-fexternal-templates', all
              template instantiations are external.  You must arrange for all
              necessary instantiations to appear in the implementation file; you
              can do this with a typedef that references each instantiation
              needed.  Conversely, when you compile using the default option
              `-fno-external-templates', all template instantiations are
              explicitly internal.

              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.

              Allow conditional expressions with mismatched types in the second
              and third arguments.  The value of such an expression is void.

              Permit assignment to this (C++ only).  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.  However, for
              backwards compatibility, you can make it valid with `-fthis-is-

              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

              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
              and unsigned char, even though its behavior is always just like
              one of those two.

              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, `-fno-signed-char'
              is equivalent to `-funsigned-char'.




              These options control whether a bitfield is signed or unsigned,
              when declared with no explicit `signed' or `unsigned' qualifier.
              By default, such a bitfield is signed, because this is consistent:
              the basic integer types such as int are signed types.

              However, when you specify `-traditional', bitfields are all
              unsigned no matter what.

              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.  `-traditional' also
              has this effect.

              Writing into string constants is a very bad idea; “constants”
              should be constant.

       These options control the C preprocessor, which is run on each C source
       file before actual compilation.

       If you use the `-E' option, GCC does nothing except preprocessing.  Some
       of these options make sense only together with `-E' because they cause
       the preprocessor output to be unsuitable for actual compilation.

       -include file
              Process file as input before processing the regular input file.
              In effect, the contents of file are compiled first.  Any `-D' and
              `-U' options on the command line are always processed before
              `-include file', regardless of the order in which they are
              written.  All the `-include' and `-imacros' options are processed
              in the order in which they are written.

       -imacros file
              Process file as input, discarding the resulting output, before
              processing the regular input file.  Because the output generated
              from file is discarded, the only effect of `-imacros file' is to
              make the macros defined in file available for use in the main
              input.  The preprocessor evaluates any `-D' and `-U' options on
              the command line before processing `-imacrosfile', regardless of
              the order in which they are written.  All the `-include' and
              `-imacros' options are processed in the order in which they are

       -idirafter dir
              Add the directory dir to the second include path.  The directories
              on the second include path are searched when a header file is not
              found in any of the directories in the main include path (the one
              that `-I' adds to).

       -iprefix prefix
              Specify prefix as the prefix for subsequent `-iwithprefix'

       -iwithprefix dir
              Add a directory to the second include path.  The directory's name
              is made by concatenating prefix and dir, where prefix was
              specified previously with `-iprefix'.

              Do not search the standard system directories for header files.
              Only the directories you have specified with `-I' options (and the
              current directory, if appropriate) are searched.

              By using both `-nostdinc' and `-I-', you can limit the include-
              file search file to only those directories you specify explicitly.

              Do not search for header files in the C++-specific standard
              directories, but do still search the other standard directories.
              (This option is used when building `libg++'.)

       -undef Do not predefine any nonstandard macros.  (Including architecture

       -E     Run only the C preprocessor.  Preprocess all the C source files
              specified and output the results to standard output or to the
              specified output file.

       -C     Tell the preprocessor not to discard comments.  Used with the `-E'

       -P     Tell the preprocessor not to generate `#line' commands.  Used with
              the `-E' option.

       -M  [ -MG ]
              Tell the preprocessor to output a rule suitable for make
              describing the dependencies of each object file.  For each source
              file, the preprocessor outputs one make-rule whose target is the
              object file name for that source file and whose dependencies are
              all the files `#include'd in it.  This rule may be a single line
              or may be continued with `\'-newline if it is long.  The list of
              rules is printed on standard output instead of the preprocessed C

              `-M' implies `-E'.

              `-MG' says to treat missing header files as generated files and
              assume they live in the same directory as the source file.  It
              must be specified in addition to `-M'.

       -MM  [ -MG ]
              Like `-M' but the output mentions only the user header files
              included with `#include file"'.  System header files included with
              `#include <file>' are omitted.

       -MD    Like `-M' but the dependency information is written to files with
              names made by replacing `.o' with `.d' at the end of the output
              file names.  This is in addition to compiling the file as
              specified—`-MD' does not inhibit ordinary compilation the way `-M'

              The Mach utility `md' can be used to merge the `.d' files into a
              single dependency file suitable for using with the `make' command.

       -MMD   Like `-MD' except mention only user header files, not system
              header files.

       -H     Print the name of each header file used, in addition to other
              normal activities.

              Assert the answer answer for question, in case it is tested with a
              preprocessor conditional such as `#if #question(answer)'.  `-A-'
              disables the standard assertions that normally describe the target

              Assert the answer answer for question, in case it is tested with a
              preprocessor conditional such as `#if #question(answer)'.  `-A-'
              disables the standard assertions that normally describe the target

              Define macro macro with the string `1' as its definition.

              Define macro macro as defn.    All instances of `-D' on the
              command line are processed before any `-U' options.

              Undefine macro macro.  `-U' options are evaluated after all `-D'
              options, but before any `-include' and `-imacros' options.

       -dM    Tell the preprocessor to output only a list of the macro
              definitions that are in effect at the end of preprocessing.  Used
              with the `-E' option.

       -dD    Tell the preprocessor to pass all macro definitions into the
              output, in their proper sequence in the rest of the output.

       -dN    Like `-dD' except that the macro arguments and contents are
              omitted.  Only `#define name' is included in the output.

              Pass option as an option to the assembler.  If option contains
              commas, it is split into multiple options at the commas.

       These options come into play when the compiler links object files into an
       executable output file.  They are meaningless if the compiler is not
       doing a link step.

              A file name that does not end in a special recognized suffix is
              considered to name an object file or library.  (Object files are
              distinguished from libraries by the linker according to the file
              contents.)  If GCC does a link step, these object files are used
              as input to the linker.

              Use the library named library when linking.

              The linker searches a standard list of directories for the
              library, which is actually a file named `liblibrary.a'.  The
              linker then uses this file as if it had been specified precisely
              by name.

              The directories searched include several standard system
              directories plus any that you specify with `-L'.

              Normally the files found this way are library files—archive files
              whose members are object files.  The linker handles an archive
              file by scanning through it for members which define symbols that
              have so far been referenced but not defined.  However, if the
              linker finds an ordinary object file rather than a library, the
              object file is linked in the usual fashion.  The only difference
              between using an `-l' option and specifying a file name is that
              `-l' surrounds library with `lib' and `.a' and searches several

       -lobjc You need this special case of the -l option in order to link an
              Objective C program.

              Do not use the standard system startup files when linking.  The
              standard libraries are used normally.

              Don't use the standard system libraries and startup files when
              linking.  Only the files you specify will be passed to the linker.

              On systems that support dynamic linking, this prevents linking
              with the shared libraries.  On other systems, this option has no

              Produce a shared object which can then be linked with other
              objects to form an executable.  Only a few systems support this

              Bind references to global symbols when building a shared object.
              Warn about any unresolved references (unless overridden by the
              link editor option `-Xlinker -z -Xlinker defs').  Only a few
              systems support this option.

       -Xlinker option
              Pass option as an option to the linker.  You can use this to
              supply system-specific linker options which GNU CC does not know
              how to recognize.

              If you want to pass an option that takes an argument, you must use
              `-Xlinker' twice, once for the option and once for the argument.
              For example, to pass `-assert definitions', you must write
              `-Xlinker -assert -Xlinker definitions'.  It does not work to
              write `-Xlinker "-assert definitions"', because this passes the
              entire string as a single argument, which is not what the linker

              Pass option as an option to the linker.  If option contains
              commas, it is split into multiple options at the commas.

       -u symbol
              Pretend the symbol symbol is undefined, to force linking of
              library modules to define it.  You can use `-u' multiple times
              with different symbols to force loading of additional library

       These options specify directories to search for header files, for
       libraries and for parts of the compiler:

       -Idir  Append directory dir to the list of directories searched for
              include files.

       -I-    Any directories you specify with `-I' options before the `-I-'
              option are searched only for the case of `#include "file"'; they
              are not searched for `#include <file>'.

              If additional directories are specified with `-I' options after
              the `-I-', these directories are searched for all `#include'
              directives.  (Ordinarily all `-I' directories are used this way.)

              In addition, the `-I-' option inhibits the use of the current
              directory (where the current input file came from) as the first
              search directory for `#include "file"'.  There is no way to
              override this effect of `-I-'.  With `-I.' you can specify
              searching the directory which was current when the compiler was
              invoked.  That is not exactly the same as what the preprocessor
              does by default, but it is often satisfactory.

              `-I-' does not inhibit the use of the standard system directories
              for header files.  Thus, `-I-' and `-nostdinc' are independent.

       -Ldir  Add directory dir to the list of directories to be searched for

              This option specifies where to find the executables, libraries and
              data files of the compiler itself.

              The compiler driver program runs one or more of the subprograms
              `cpp', `cc1' (or, for C++, `cc1plus'), `as' and `ld'.  It tries
              prefix as a prefix for each program it tries to run, both with and
              without `machine/version/'.

              For each subprogram to be run, the compiler driver first tries the
              `-B' prefix, if any.  If that name is not found, or if `-B' was
              not specified, the driver tries two standard prefixes, which are
              `/usr/lib/gcc/' and `/usr/local/lib/gcc-lib/'.  If neither of
              those results in a file name that is found, the compiler driver
              searches for the unmodified program name, using the directories
              specified in your `PATH' environment variable.

              The run-time support file `libgcc.a' is also searched for using
              the `-B' prefix, if needed.  If it is not found there, the two
              standard prefixes above are tried, and that is all.  The file is
              left out of the link if it is not found by those means.  Most of
              the time, on most machines, `libgcc.a' is not actually necessary.

              You can get a similar result from the environment variable
              GCC_EXEC_PREFIX; if it is defined, its value is used as a prefix
              in the same way.  If both the `-B' option and the GCC_EXEC_PREFIX
              variable are present, the `-B' option is used first and the
              environment variable value second.

       Warnings are diagnostic messages that report constructions which are not
       inherently erroneous but which are risky or suggest there may have been
       an error.

       These options control the amount and kinds of warnings produced by GNU

              Check the code for syntax errors, but don't emit any output.

       -w     Inhibit all warning messages.

              Inhibit warning messages about the use of #import.

              Issue all the warnings demanded by strict ANSI standard C; reject
              all programs that use forbidden extensions.

              Valid ANSI standard C programs should compile properly with or
              without this option (though a rare few will require `-ansi').
              However, without this option, certain GNU extensions and
              traditional C features are supported as well.  With this option,
              they are rejected.  There is no reason to use this option; it
              exists only to satisfy pedants.

              `-pedantic' does not cause warning messages for use of the
              alternate keywords whose names begin and end with `__'.  Pedantic
              warnings are also disabled in the expression that follows
              __extension__.  However, only system header files should use these
              escape routes; application programs should avoid them.

              Like `-pedantic', except that errors are produced rather than

       -W     Print extra warning messages for these events:

          •   A nonvolatile automatic variable might be changed by a call to
              longjmp.  These warnings are possible only in optimizing

              The compiler sees only the calls to setjmp.  It cannot know where
              longjmp will be called; in fact, a signal handler could call it at
              any point in the code.  As a result, you may get a warning even
              when there is in fact no problem because longjmp cannot in fact be
              called at the place which would cause a problem.

          •   A function can return either with or without a value.  (Falling
              off the end of the function body is considered returning without a
              value.)  For example, this function would evoke such a warning:

              foo (a)
                if (a > 0)
                  return a;

              Spurious warnings can occur because GNU CC does not realize that
              certain functions (including abort and longjmp) will never return.

          •   An expression-statement or the left-hand side of a comma
              expression contains no side effects.  To suppress the warning,
              cast the unused expression to void.  For example, an expression
              such as `x[i,j]' will cause a warning, but `x[(void)i,j]' will

          •   An unsigned value is compared against zero with `>' or `<='.

              Warn whenever a declaration does not specify a type.

              Warn whenever a function is used before being declared.

              Same as -Wimplicit-int and -Wimplicit-function-declaration.

       -Wmain Warn if the main function is declared or defined with a suspicious
              type.  Typically, it is a function with external linkage,
              returning int, and taking zero or two arguments.

              Warn whenever a function is defined with a return-type that
              defaults to int.  Also warn about any return statement with no
              return-value in a function whose return-type is not void.

              Warn whenever a local variable is unused aside from its
              declaration, whenever a function is declared static but never
              defined, and whenever a statement computes a result that is
              explicitly not used.

              Warn whenever a switch statement has an index of enumeral type and
              lacks a case for one or more of the named codes of that
              enumeration.  (The presence of a default label prevents this
              warning.)  case labels outside the enumeration range also provoke
              warnings when this option is used.

              Warn whenever a comment-start sequence `/∗' appears in a comment.

              Warn if any trigraphs are encountered (assuming they are enabled).

              Check calls to printf and scanf, etc., to make sure that the
              arguments supplied have types appropriate to the format string

              Warn if an array subscript has type char.  This is a common cause
              of error, as programmers often forget that this type is signed on
              some machines.

              An automatic variable is used without first being initialized.

              These warnings are possible only in optimizing compilation,
              because they require data flow information that is computed only
              when optimizing.  If you don't specify `-O', you simply won't get
              these warnings.

              These warnings occur only for variables that are candidates for
              register allocation.  Therefore, they do not occur for a variable
              that is declared volatile, or whose address is taken, or whose
              size is other than 1, 2, 4 or 8 bytes.  Also, they do not occur
              for structures, unions or arrays, even when they are in registers.

              Note that there may be no warning about a variable that is used
              only to compute a value that itself is never used, because such
              computations may be deleted by data flow analysis before the
              warnings are printed.

              These warnings are made optional because GNU CC is not smart
              enough to see all the reasons why the code might be correct
              despite appearing to have an error.  Here is one example of how
              this can happen:

                int x;
                switch (y)
                  case 1: x = 1;
                  case 2: x = 4;
                  case 3: x = 5;
                foo (x);

              If the value of y is always 1, 2 or 3, then x is always
              initialized, but GNU CC doesn't know this.  Here is another common

                int save_y;
                if (change_y) save_y = y, y = new_y;
                if (change_y) y = save_y;

              This has no bug because save_y is used only if it is set.

              Some spurious warnings can be avoided if you declare as volatile
              all the functions you use that never return.

              Warn if parentheses are omitted in certain contexts.

              When using templates in a C++ program, warn if debugging is not
              yet fully available (C++ only).

       -Wall  All of the above `-W' options combined.  These are all the options
              which pertain to usage that we recommend avoiding and that we
              believe is easy to avoid, even in conjunction with macros.

       The remaining `-W...' options are not implied by `-Wall' because they
       warn about constructions that we consider reasonable to use, on occasion,
       in clean programs.

              Warn about certain constructs that behave differently in
              traditional and ANSI C.

          •   Macro arguments occurring within string constants in the macro
              body.  These would substitute the argument in traditional C, but
              are part of the constant in ANSI C.

          •   A function declared external in one block and then used after the
              end of the block.

          •   A switch statement has an operand of type long.

              Warn whenever a local variable shadows another local variable.

              Warn whenever two distinct identifiers match in the first len
              characters.  This may help you prepare a program that will compile
              with certain obsolete, brain-damaged compilers.

              Warn about anything that depends on the “size of” a function type
              or of void.  GNU C assigns these types a size of 1, for
              convenience in calculations with void ∗ pointers and pointers to

              Warn whenever a pointer is cast so as to remove a type qualifier
              from the target type.  For example, warn if a const char ∗ is cast
              to an ordinary char ∗.

              Warn whenever a pointer is cast such that the required alignment
              of the target is increased.  For example, warn if a char ∗ is cast
              to an int ∗ on machines where integers can only be accessed at
              two- or four-byte boundaries.

              Give string constants the type const char[length] so that copying
              the address of one into a non-const char ∗ pointer will get a
              warning.  These warnings will help you find at compile time code
              that can try to write into a string constant, but only if you have
              been very careful about using const in declarations and
              prototypes.  Otherwise, it will just be a nuisance; this is why we
              did not make `-Wall' request these warnings.

              Warn if a prototype causes a type conversion that is different
              from what would happen to the same argument in the absence of a
              prototype.  This includes conversions of fixed point to floating
              and vice versa, and conversions changing the width or signedness
              of a fixed point argument except when the same as the default

              Warn if any functions that return structures or unions are defined
              or called.  (In languages where you can return an array, this also
              elicits a warning.)

              Warn if a function is declared or defined without specifying the
              argument types.  (An old-style function definition is permitted
              without a warning if preceded by a declaration which specifies the
              argument types.)

              Warn if a global function is defined without a previous prototype
              declaration.  This warning is issued even if the definition itself
              provides a prototype.  The aim is to detect global functions that
              fail to be declared in header files.

              Warn if a global function is defined without a previous
              declaration.  Do so even if the definition itself provides a
              prototype.  Use this option to detect global functions that are
              not declared in header files.

              Warn if anything is declared more than once in the same scope,
              even in cases where multiple declaration is valid and changes

              Warn if an extern declaration is encountered within an function.

              Warn about conversion between different enumeration types (C++

              Warn if long long type is used.  This is default.  To inhibit the
              warning messages, use flag `-Wno-long-long'.  Flags `-W-long-long'
              and `-Wno-long-long' are taken into account only when flag
              `-pedantic' is used.

              (C++ only.)  In a derived class, the definitions of virtual
              functions must match the type signature of a virtual function
              declared in the base class.  Use this option to request warnings
              when a derived class declares a function that may be an erroneous
              attempt to define a virtual function: that is, warn when a
              function with the same name as a virtual function in the base
              class, but with a type signature that doesn't match any virtual
              functions from the base class.

              Warn if a function can not be inlined, and either it was declared
              as inline, or else the -finline-functions option was given.

              Treat warnings as errors; abort compilation after any warning.

       GNU CC has various special options that are used for debugging either
       your program or GCC:

       -g     Produce debugging information in the operating system's native
              format (stabs, COFF, XCOFF, or DWARF).  GDB can work with this
              debugging information.

              On most systems that use stabs format, `-g' enables use of extra
              debugging information that only GDB can use; this extra
              information makes debugging work better in GDB but will probably
              make other debuggers crash or refuse to read the program.  If you
              want to control for certain whether to generate the extra
              information, use `-gstabs+', `-gstabs', `-gxcoff+', `-gxcoff',
              `-gdwarf+', or `-gdwarf' (see below).

              Unlike most other C compilers, GNU CC allows you to use `-g' with
              `-O'.  The shortcuts taken by optimized code may occasionally
              produce surprising results: some variables you declared may not
              exist at all; flow of control may briefly move where you did not
              expect it; some statements may not be executed because they
              compute constant results or their values were already at hand;
              some statements may execute in different places because they were
              moved out of loops.

              Nevertheless it proves possible to debug optimized output.  This
              makes it reasonable to use the optimizer for programs that might
              have bugs.

       The following options are useful when GNU CC is generated with the
       capability for more than one debugging format.

       -ggdb  Produce debugging information in the native format (if that is
              supported), including GDB extensions if at all possible.

              Produce debugging information in stabs format (if that is
              supported), without GDB extensions.  This is the format used by
              DBX on most BSD systems.

              Produce debugging information in stabs format (if that is
              supported), using GNU extensions understood only by the GNU
              debugger (GDB).  The use of these extensions is likely to make
              other debuggers crash or refuse to read the program.

       -gcoff Produce debugging information in COFF format (if that is
              supported).  This is the format used by SDB on most System V
              systems prior to System V Release 4.

              Produce debugging information in XCOFF format (if that is
              supported).  This is the format used by the DBX debugger on IBM
              RS/6000 systems.

              Produce debugging information in XCOFF format (if that is
              supported), using GNU extensions understood only by the GNU
              debugger (GDB).  The use of these extensions is likely to make
              other debuggers crash or refuse to read the program.

              Produce debugging information in DWARF format (if that is
              supported).  This is the format used by SDB on most System V
              Release 4 systems.

              Produce debugging information in DWARF format (if that is
              supported), using GNU extensions understood only by the GNU
              debugger (GDB).  The use of these extensions is likely to make
              other debuggers crash or refuse to read the program.

       -gcofflevel -gxcofflevel

              Request debugging information and also use level to specify how
              much information.  The default level is 2.

              Level 1 produces minimal information, enough for making backtraces
              in parts of the program that you don't plan to debug.  This
              includes descriptions of functions and external variables, but no
              information about local variables and no line numbers.

              Level 3 includes extra information, such as all the macro
              definitions present in the program.  Some debuggers support macro
              expansion when you use `-g3'.

       -p     Generate extra code to write profile information suitable for the
              analysis program prof.

       -pg    Generate extra code to write profile information suitable for the
              analysis program gprof.

       -a     Generate extra code to write profile information for basic blocks,
              which will record the number of times each basic block is
              executed.  This data could be analyzed by a program like tcov.
              Note, however, that the format of the data is not what tcov
              expects.  Eventually GNU gprof should be extended to process this

       -ax    Generate extra code to read basic block profiling parameters from
              file `' and write profiling results to file `bb.out'.
              `' contains a list of functions. Whenever a function on the
              list is entered, profiling is turned on. When the outmost function
              is left, profiling is turned off. If a function name is prefixed
              with `-' the function is excluded from profiling. If a function
              name is not unique it can be disambiguated by writing
              `/path/filename.d:functionname'. `bb.out' will list some available
              filenames.  Four function names have a special meaning:
              `__bb_jumps__' will cause jump frequencies to be written to
              `bb.out'.  `__bb_trace__' will cause the sequence of basic blocks
              to be piped into `gzip' and written to file `bbtrace.gz'.
              `__bb_hidecall__' will cause call instructions to be excluded from
              the trace.  `__bb_showret__' will cause return instructions to be
              included in the trace.

              Says to make debugging dumps during compilation at times specified
              by letters.  This is used for debugging the compiler.  The file
              names for most of the dumps are made by appending a word to the
              source file name (e.g.  `foo.c.rtl' or `foo.c.jump').

       -dM    Dump all macro definitions, at the end of preprocessing, and write
              no output.

       -dN    Dump all macro names, at the end of preprocessing.

       -dD    Dump all macro definitions, at the end of preprocessing, in
              addition to normal output.

       -dy    Dump debugging information during parsing, to standard error.

       -dr    Dump after RTL generation, to `file.rtl'.

       -dx    Just generate RTL for a function instead of compiling it.  Usually
              used with `r'.

       -dj    Dump after first jump optimization, to `file.jump'.

       -ds    Dump after CSE (including the jump optimization that sometimes
              follows CSE), to `file.cse'.

       -dL    Dump after loop optimization, to `file.loop'.

       -dt    Dump after the second CSE pass (including the jump optimization
              that sometimes follows CSE), to `file.cse2'.

       -df    Dump after flow analysis, to `file.flow'.

       -dc    Dump after instruction combination, to `file.combine'.

       -dS    Dump after the first instruction scheduling pass, to `file.sched'.

       -dl    Dump after local register allocation, to `file.lreg'.

       -dg    Dump after global register allocation, to `file.greg'.

       -dR    Dump after the second instruction scheduling pass, to

       -dJ    Dump after last jump optimization, to `file.jump2'.

       -dd    Dump after delayed branch scheduling, to `file.dbr'.

       -dk    Dump after conversion from registers to stack, to `file.stack'.

       -da    Produce all the dumps listed above.

       -dm    Print statistics on memory usage, at the end of the run, to
              standard error.

       -dp    Annotate the assembler output with a comment indicating which
              pattern and alternative was used.

              When running a cross-compiler, pretend that the target machine
              uses the same floating point format as the host machine.  This
              causes incorrect output of the actual floating constants, but the
              actual instruction sequence will probably be the same as GNU CC
              would make when running on the target machine.

              Store the usual “temporary” intermediate files permanently; place
              them in the current directory and name them based on the source
              file.  Thus, compiling `foo.c' with `-c -save-temps' would produce
              files `foo.cpp' and `foo.s', as well as `foo.o'.

              Print the full absolute name of the library file library  that
              would be used when linking—and do not do anything else.  With this
              option, GNU CC does not compile or link anything; it just prints
              the file name.

              Same as `-print-file-name=libgcc.a'.

              Like `-print-file-name', but searches for a program such as `cpp'.

       These options control various sorts of optimizations:


       -O1    Optimize.  Optimizing compilation takes somewhat more time, and a
              lot more memory for a large function.

              Without `-O', the compiler's goal is to reduce the cost of
              compilation and to make debugging produce the expected results.
              Statements are independent: if you stop the program with a
              breakpoint between statements, you can then assign a new value to
              any variable or change the program counter to any other statement
              in the function and get exactly the results you would expect from
              the source code.

              Without `-O', only variables declared register are allocated in
              registers.  The resulting compiled code is a little worse than
              produced by PCC without `-O'.

              With `-O', the compiler tries to reduce code size and execution

              When you specify `-O', the two options `-fthread-jumps' and
              `-fdefer-pop' are turned on.  On machines that have delay slots,
              the `-fdelayed-branch' option is turned on.  For those machines
              that can support debugging even without a frame pointer, the
              `-fomit-frame-pointer' option is turned on.  On some machines
              other flags may also be turned on.

       -O2    Optimize even more.  Nearly all supported optimizations that do
              not involve a space-speed tradeoff are performed.  Loop unrolling
              and function inlining are not done, for example.  As compared to
              -O, this option increases both compilation time and the
              performance of the generated code.

       -O3    Optimize yet more. This turns on everything -O2 does, along with
              also turning on -finline-functions.

       -O0    Do not optimize.

              If you use multiple -O options, with or without level numbers, the
              last such option is the one that is effective.

       Options of the form `-fflag' specify machine-independent flags.  Most
       flags have both positive and negative forms; the negative form of `-ffoo'
       would be `-fno-foo'.  The following list shows only one form—the one
       which is not the default.  You can figure out the other form by either
       removing `no-' or adding it.

              Do not store floating point variables in registers.  This prevents
              undesirable excess precision on machines such as the 68000 where
              the floating registers (of the 68881) keep more precision than a
              double is supposed to have.

              For most programs, the excess precision does only good, but a few
              programs rely on the precise definition of IEEE floating point.
              Use `-ffloat-store' for such programs.


              Use heuristics to compile faster (C++ only).  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

                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.

              Don't make member functions inline by default merely because they
              are defined inside the class scope (C++ only).

              Always pop the arguments to each function call as soon as that
              function returns.  For machines which must pop arguments after a
              function call, the compiler normally lets arguments accumulate on
              the stack for several function calls and pops them all at once.

              Force memory operands to be copied into registers before doing
              arithmetic on them.  This may produce better code by making all
              memory references potential common subexpressions.  When they are
              not common subexpressions, instruction combination should
              eliminate the separate register-load.  I am interested in hearing
              about the difference this makes.

              Force memory address constants to be copied into registers before
              doing arithmetic on them.  This may produce better code just as
              `-fforce-mem' may.  I am interested in hearing about the
              difference this makes.

              Don't keep the frame pointer in a register for functions that
              don't need one.  This avoids the instructions to save, set up and
              restore frame pointers; it also makes an extra register available
              in many functions.  It also makes debugging impossible on most

              On some machines, such as the Vax, this flag has no effect,
              because the standard calling sequence automatically handles the
              frame pointer and nothing is saved by pretending it doesn't exist.
              The machine-description macro FRAME_POINTER_REQUIRED controls
              whether a target machine supports this flag.

              Integrate all simple functions into their callers.  The compiler
              heuristically decides which functions are simple enough to be
              worth integrating in this way.

              If all calls to a given function are integrated, and the function
              is declared static, then GCC normally does not output the function
              as assembler code in its own right.

              Enable values to be allocated in registers that will be clobbered
              by function calls, by emitting extra instructions to save and
              restore the registers around such calls.  Such allocation is done
              only when it seems to result in better code than would otherwise
              be produced.

              This option is enabled by default on certain machines, usually
              those which have no call-preserved registers to use instead.

              Even if all calls to a given function are integrated, and the
              function is declared static, nevertheless output a separate run-
              time callable version of the function.

              Do not put function addresses in registers; make each instruction
              that calls a constant function contain the function's address

              This option results in less efficient code, but some strange hacks
              that alter the assembler output may be confused by the
              optimizations performed when this option is not used.

              Disable any machine-specific peephole optimizations.

              This option allows GCC to violate some ANSI or IEEE
              rules/specifications in the interest of optimizing code for speed.
              For example, it allows the compiler to assume arguments to the
              sqrt function are non-negative numbers.

              This option should never be turned on by any `-O' option since it
              can result in incorrect output for programs which depend on an
              exact implementation of IEEE or ANSI rules/specifications for math

       The following options control specific optimizations.  The `-O2' option
       turns on all of these optimizations except `-funroll-loops' and

       The `-O' option usually turns on the `-fthread-jumps' and
       `-fdelayed-branch' options, but specific machines may change the default

       You can use the following flags in the rare cases when “fine-tuning” of
       optimizations to be performed is desired.

              Perform the optimizations of loop strength reduction and
              elimination of iteration variables.

              Perform optimizations where we check to see if a jump branches to
              a location where another comparison subsumed by the first is
              found.  If so, the first branch is redirected to either the
              destination of the second branch or a point immediately following
              it, depending on whether the condition is known to be true or

              Perform the optimization of loop unrolling.  This is only done for
              loops whose number of iterations can be determined at compile time
              or run time.

              Perform the optimization of loop unrolling.  This is done for all
              loops.  This usually makes programs run more slowly.

              In common subexpression elimination, scan through jump
              instructions when the target of the jump is not reached by any
              other path.  For example, when CSE encounters an if statement with
              an else clause, CSE will follow the jump when the condition tested
              is false.

              This is similar to `-fcse-follow-jumps', but causes CSE to follow
              jumps which conditionally skip over blocks.  When CSE encounters a
              simple if statement with no else clause, `-fcse-skip-blocks'
              causes CSE to follow the jump around the body of the if.

              Re-run common subexpression elimination after loop optimizations
              has been performed.

              Elide constructors when this seems plausible (C++ only).  With
              this flag, GNU C++ initializes y directly from the call to foo
              without going through a temporary in the following code:

              A foo (); A y = foo ();

              Without this option, GNU C++ first initializes y by calling the
              appropriate constructor for type A; then assigns the result of foo
              to a temporary; and, finally, replaces the initial value of `y'
              with the temporary.

              The default behavior (`-fno-elide-constructors') is specified by
              the draft ANSI C++ standard.  If your program's constructors have
              side effects, using `-felide-constructors' can make your program
              act differently, since some constructor calls may be omitted.

              Perform a number of minor optimizations that are relatively

              If supported for the target machine, attempt to reorder
              instructions to exploit instruction slots available after delayed
              branch instructions.

              If supported for the target machine, attempt to reorder
              instructions to eliminate execution stalls due to required data
              being unavailable.  This helps machines that have slow floating
              point or memory load instructions by allowing other instructions
              to be issued until the result of the load or floating point
              instruction is required.

              Similar to `-fschedule-insns', but requests an additional pass of
              instruction scheduling after register allocation has been done.
              This is especially useful on machines with a relatively small
              number of registers and where memory load instructions take more
              than one cycle.

       By default, GNU CC compiles code for the same type of machine that you
       are using.  However, it can also be installed as a cross-compiler, to
       compile for some other type of machine.  In fact, several different
       configurations of GNU CC, for different target machines, can be installed
       side by side.  Then you specify which one to use with the `-b' option.

       In addition, older and newer versions of GNU CC can be installed side by
       side.  One of them (probably the newest) will be the default, but you may
       sometimes wish to use another.

       -b machine
              The argument machine specifies the target machine for compilation.
              This is useful when you have installed GNU CC as a cross-compiler.

              The value to use for machine is the same as was specified as the
              machine type when configuring GNU CC as a cross-compiler.  For
              example, if a cross-compiler was configured with `configure
              i386v', meaning to compile for an 80386 running System V, then you
              would specify `-b i386v' to run that cross compiler.

              When you do not specify `-b', it normally means to compile for the
              same type of machine that you are using.

       -V version
              The argument version specifies which version of GNU CC to run.
              This is useful when multiple versions are installed.  For example,
              version might be `2.0', meaning to run GNU CC version 2.0.

              The default version, when you do not specify `-V', is controlled
              by the way GNU CC is installed.  Normally, it will be a version
              that is recommended for general use.

       Each of the target machine types can have its own special options,
       starting with `-m', to choose among various hardware models or
       configurations—for example, 68010 vs 68020, floating coprocessor or none.
       A single installed version of the compiler can compile for any model or
       configuration, according to the options specified.

       Some configurations of the compiler also support additional special
       options, usually for command-line compatibility with other compilers on
       the same platform.

       These are the `-m' options defined for the 68000 series:


              Generate output for a 68000.  This is the default when the
              compiler is configured for 68000-based systems.


              Generate output for a 68020 (rather than a 68000).  This is the
              default when the compiler is configured for 68020-based systems.

              Generate output containing 68881 instructions for floating point.
              This is the default for most 68020-based systems unless -nfp was
              specified when the compiler was configured.

              Generate output for a 68030.  This is the default when the
              compiler is configured for 68030-based systems.

              Generate output for a 68040.  This is the default when the
              compiler is configured for 68040-based systems.

              Generate output for a 68040, without using any of the new
              instructions.  This results in code which can run relatively
              efficiently on either a 68020/68881 or a 68030 or a 68040.

       -mfpa  Generate output containing Sun FPA instructions for floating

              Generate output containing library calls for floating point.
              WARNING: the requisite libraries are not part of GNU CC.  Normally
              the facilities of the machine's usual C compiler are used, but
              this can't be done directly in cross-compilation.  You must make
              your own arrangements to provide suitable library functions for

              Consider type int to be 16 bits wide, like short int.

              Do not use the bit-field instructions.  `-m68000' implies

              Do use the bit-field instructions.  `-m68020' implies
              `-mbitfield'.  This is the default if you use the unmodified

       -mrtd  Use a different function-calling convention, in which functions
              that take a fixed number of arguments return with the rtd
              instruction, which pops their arguments while returning.  This
              saves one instruction in the caller since there is no need to pop
              the arguments there.

              This calling convention is incompatible with the one normally used
              on Unix, so you cannot use it if you need to call libraries
              compiled with the Unix compiler.

              Also, you must provide function prototypes for all functions that
              take variable numbers of arguments (including printf); otherwise
              incorrect code will be generated for calls to those functions.

              In addition, seriously incorrect code will result if you call a
              function with too many arguments.  (Normally, extra arguments are
              harmlessly ignored.)

              The rtd instruction is supported by the 68010 and 68020
              processors, but not by the 68000.

       These `-m' options are defined for the Vax:

       -munix Do not output certain jump instructions (aobleq and so on) that
              the Unix assembler for the Vax cannot handle across long ranges.

       -mgnu  Do output those jump instructions, on the assumption that you will
              assemble with the GNU assembler.

       -mg    Output code for g-format floating point numbers instead of d-

       These `-m' switches are supported on the SPARC:


              Generate output containing floating point instructions.  This is
              the default.


              Generate output containing library calls for floating point.
              Warning: there is no GNU floating-point library for SPARC.
              Normally the facilities of the machine's usual C compiler are
              used, but this cannot be done directly in cross-compilation.  You
              must make your own arrangements to provide suitable library
              functions for cross-compilation.

              -msoft-float changes the calling convention in the output file;
              therefore, it is only useful if you compile all of a program with
              this option.


              With -mepilogue (the default), the compiler always emits code for
              function exit at the end of each function.  Any function exit in
              the middle of the function (such as a return statement in C) will
              generate a jump to the exit code at the end of the function.

              With -mno-epilogue, the compiler tries to emit exit code inline at
              every function exit.



              These three options select variations on the SPARC architecture.

              By default (unless specifically configured for the Fujitsu
              SPARClite), GCC generates code for the v7 variant of the SPARC

              -mv8 will give you SPARC v8 code.  The only difference from v7
              code is that the compiler emits the integer multiply and integer
              divide instructions which exist in SPARC v8 but not in SPARC v7.

              -msparclite will give you SPARClite code.  This adds the integer
              multiply, integer divide step and scan (ffs) instructions which
              exist in SPARClite but not in SPARC v7.


              These two options select the processor for which the code is

              With -mcypress (the default), the compiler optimises code for the
              Cypress CY7C602 chip, as used in the SparcStation/SparcServer 3xx
              series. This is also appropriate for the older SparcStation 1, 2,
              IPX etc.

              With -msupersparc the compiler optimises code for the SuperSparc
              cpu, as used in the SparcStation 10, 1000 and 2000 series. This
              flag also enables use of the full SPARC v8 instruction set.

       These `-m' options are defined for the Convex:

       -mc1   Generate output for a C1.  This is the default when the compiler
              is configured for a C1.

       -mc2   Generate output for a C2.  This is the default when the compiler
              is configured for a C2.

              Generate code which puts an argument count in the word preceding
              each argument list.  Some nonportable Convex and Vax programs need
              this word.  (Debuggers don't, except for functions with variable-
              length argument lists; this info is in the symbol table.)

              Omit the argument count word.  This is the default if you use the
              unmodified sources.

       These `-m' options are defined for the AMD Am29000:

       -mdw   Generate code that assumes the DW bit is set, i.e., that byte and
              halfword operations are directly supported by the hardware.  This
              is the default.

       -mnodw Generate code that assumes the DW bit is not set.

       -mbw   Generate code that assumes the system supports byte and halfword
              write operations.  This is the default.

       -mnbw  Generate code that assumes the systems does not support byte and
              halfword write operations.  This implies `-mnodw'.

              Use a small memory model that assumes that all function addresses
              are either within a single 256 KB segment or at an absolute
              address of less than 256K.  This allows the call instruction to be
              used instead of a const, consth, calli sequence.

              Do not assume that the call instruction can be used; this is the

              Generate code for the Am29050.

              Generate code for the Am29000.  This is the default.

              Generate references to registers gr64-gr95 instead of gr96-gr127.
              This option can be used when compiling kernel code that wants a
              set of global registers disjoint from that used by user-mode code.

              Note that when this option is used, register names in `-f' flags
              must use the normal, user-mode, names.

              Use the normal set of global registers, gr96-gr127.  This is the

              Insert a call to __msp_check after each stack adjustment.  This is
              often used for kernel code.

       These `-m' options are defined for Motorola 88K architectures:

              Generate code that works well on both the m88100 and the m88110.

              Generate code that works best for the m88100, but that also runs
              on the m88110.

              Generate code that works best for the m88110, and may not run on
              the m88100.

              Include an ident directive in the assembler output recording the
              source file name, compiler name and version, timestamp, and
              compilation flags used.

              In assembler output, emit symbol names without adding an
              underscore character at the beginning of each name.  The default
              is to use an underscore as prefix on each name.


              Early models of the 88K architecture had problems with division by
              zero; in particular, many of them didn't trap.  Use these options
              to avoid including (or to include explicitly) additional code to
              detect division by zero and signal an exception.  All GCC
              configurations for the 88K use `-mcheck-zero-division' by default.


              Include (or omit) additional debugging information (about
              registers used in each stack frame) as specified in the 88Open
              Object Compatibility Standard, “OCS”.  This extra information is
              not needed by GDB.  The default for DG/UX, SVr4, and Delta 88
              SVr3.2 is to include this information; other 88k configurations
              omit this information by default.


              Force (or do not require) register values to be stored in a
              particular place in stack frames, as specified in OCS.  The DG/UX,
              Delta88 SVr3.2, and BCS configurations use `-mocs-frame-position';
              other 88k configurations have the default


              Control how to store function arguments in stack frames.
              `-moptimize-arg-area' saves space, but may break some debuggers
              (not GDB).  `-mno-optimize-arg-area' conforms better to standards.
              By default GCC does not optimize the argument area.

              num Generate smaller data references by making them relative to
              r0, which allows loading a value using a single instruction
              (rather than the usual two).  You control which data references
              are affected by specifying num with this option.  For example, if
              you specify `-mshort-data-512', then the data references affected
              are those involving displacements of less than 512 bytes.
              `-mshort-data-num' is not effective for num greater than 64K.


              Do, or do not, generate code to guarantee sequential consistency
              of volatile memory references.

              GNU CC always guarantees consistency by default, for the preferred
              processor submodel.  How this is done depends on the submodel.

              The m88100 processor does not reorder memory references and so
              always provides sequential consistency.  If you use `-m88100', GNU
              CC does not generate any special instructions for sequential

              The order of memory references made by the m88110 processor does
              not always match the order of the instructions requesting those
              references.  In particular, a load instruction may execute before
              a preceding store instruction.  Such reordering violates
              sequential consistency of volatile memory references, when there
              are multiple processors.  When you use `-m88000' or `-m88110', GNU
              CC generates special instructions when appropriate, to force
              execution in the proper order.

              The extra code generated to guarantee consistency may affect the
              performance of your application.  If you know that you can safely
              forgo this guarantee, you may use the option `-mno-serialize-

              If you use the `-m88100' option but require sequential consistency
              when running on the m88110 processor, you should use `-mserialize-


       -msvr3 Turn on (`-msvr4') or off (`-msvr3') compiler extensions related
              to System V release 4 (SVr4).  This controls the following:

          •   Which variant of the assembler syntax to emit (which you can
              select independently using `-mversion-03.00').

          •   `-msvr4' makes the C preprocessor recognize `#pragma weak'

          •   `-msvr4' makes GCC issue additional declaration directives used in

       `-msvr3' is the default for all m88K configurations except the SVr4


              Include code to detect bit-shifts of more than 31 bits;
              respectively, trap such shifts or emit code to handle them
              properly.  By default GCC makes no special provision for large bit

              Very early models of the 88K architecture didn't have a divide
              instruction, so GCC avoids that instruction by default.  Use this
              option to specify that it's safe to use the divide instruction.

              In the DG/UX configuration, there are two flavors of SVr4.  This
              option modifies -msvr4 to select whether the hybrid-COFF or real-
              ELF flavor is used.  All other configurations ignore this option.

              Warn when a function passes a struct as an argument or result.
              Structure-passing conventions have changed during the evolution of
              the C language, and are often the source of portability problems.
              By default, GCC issues no such warning.

       These options are defined for the IBM RS6000:


              Control whether or not floating-point constants go in the Table of
              Contents (TOC), a table of all global variable and function
              addresses.  By default GCC puts floating-point constants there; if
              the TOC overflows, `-mno-fp-in-toc' will reduce the size of the
              TOC, which may avoid the overflow.

       These `-m' options are defined for the IBM RT PC:

              Use an in-line code sequence for integer multiplies.  This is the

              Call lmul$$ for integer multiples.

              Generate full-size floating point data blocks, including the
              minimum amount of scratch space recommended by IBM.  This is the

              Do not include extra scratch space in floating point data blocks.
              This results in smaller code, but slower execution, since scratch
              space must be allocated dynamically.

              Use a calling sequence incompatible with the IBM calling
              convention in which floating point arguments are passed in
              floating point registers.  Note that varargs.h and stdargs.h will
              not work with floating point operands if this option is specified.

              Use the normal calling convention for floating point arguments.
              This is the default.

              Return structures of more than one word in memory, rather than in
              a register.  This provides compatibility with the MetaWare HighC
              (hc) compiler.  Use `-fpcc-struct-return' for compatibility with
              the Portable C Compiler (pcc).

              Return some structures of more than one word in registers, when
              convenient.  This is the default.  For compatibility with the IBM-
              supplied compilers, use either `-fpcc-struct-return' or

       These `-m' options are defined for the MIPS family of computers:

              Assume the defaults for the machine type cpu-type when scheduling
              instructions.  The default cpu-type is default, which picks the
              longest cycles times for any of the machines, in order that the
              code run at reasonable rates on all MIPS cpu's.  Other choices for
              cpu-type are r2000, r3000, r4000, and r6000.  While picking a
              specific cpu-type will schedule things appropriately for that
              particular chip, the compiler will not generate any code that does
              not meet level 1 of the MIPS ISA (instruction set architecture)
              without the -mips2 or -mips3 switches being used.

       -mips2 Issue instructions from level 2 of the MIPS ISA (branch likely,
              square root instructions).  The -mcpu=r4000 or -mcpu=r6000 switch
              must be used in conjunction with -mips2.

       -mips3 Issue instructions from level 3 of the MIPS ISA (64 bit
              instructions).  The -mcpu=r4000 switch must be used in conjunction
              with -mips2.



              These options don't work at present.

              Generate code for the MIPS assembler, and invoke mips-tfile to add
              normal debug information.  This is the default for all platforms
              except for the OSF/1 reference platform, using the OSF/rose object
              format.  If any of the -ggdb, -gstabs, or -gstabs+ switches are
              used, the mips-tfile program will encapsulate the stabs within
              MIPS ECOFF.

       -mgas  Generate code for the GNU assembler.  This is the default on the
              OSF/1 reference platform, using the OSF/rose object format.


              The -mrnames switch says to output code using the MIPS software
              names for the registers, instead of the hardware names (ie, a0
              instead of $4).  The GNU assembler does not support the -mrnames
              switch, and the MIPS assembler will be instructed to run the MIPS
              C preprocessor over the source file.  The -mno-rnames switch is


              The -mgpopt switch says to write all of the data declarations
              before the instructions in the text section, to all the MIPS
              assembler to generate one word memory references instead of using
              two words for short global or static data items.  This is on by
              default if optimization is selected.


              For each non-inline function processed, the -mstats switch causes
              the compiler to emit one line to the standard error file to print
              statistics about the program (number of registers saved, stack
              size, etc.).


              The -mmemcpy switch makes all block moves call the appropriate
              string function (memcpy or bcopy) instead of possibly generating
              inline code.


              The -mno-mips-tfile switch causes the compiler not postprocess the
              object file with the mips-tfile program, after the MIPS assembler
              has generated it to add debug support.  If mips-tfile is not run,
              then no local variables will be available to the debugger.  In
              addition, stage2 and stage3 objects will have the temporary file
              names passed to the assembler embedded in the object file, which
              means the objects will not compare the same.

              Generate output containing library calls for floating point.
              WARNING: the requisite libraries are not part of GNU CC.  Normally
              the facilities of the machine's usual C compiler are used, but
              this can't be done directly in cross-compilation.  You must make
              your own arrangements to provide suitable library functions for

              Generate output containing floating point instructions.  This is
              the default if you use the unmodified sources.

       -mfp64 Assume that the FR bit in the status word is on, and that there
              are 32 64-bit floating point registers, instead of 32 32-bit
              floating point registers.  You must also specify the -mcpu=r4000
              and -mips3 switches.

       -mfp32 Assume that there are 32 32-bit floating point registers.  This is
              the default.


              Emit (or do not emit) the .abicalls, .cpload, and .cprestore
              pseudo operations that some System V.4 ports use for position
              independent code.


              The -mhalf-pic switch says to put pointers to extern references
              into the data section and load them up, rather than put the
              references in the text section.  This option does not work at
              present.  -Gnum Put global and static items less than or equal to
              num bytes into the small data or bss sections instead of the
              normal data or bss section.  This allows the assembler to emit one
              word memory reference instructions based on the global pointer (gp
              or $28), instead of the normal two words used.  By default, num is
              8 when the MIPS assembler is used, and 0 when the GNU assembler is
              used.  The -Gnum switch is also passed to the assembler and
              linker.  All modules should be compiled with the same -Gnum value.

       -nocpp Tell the MIPS assembler to not run its preprocessor over user
              assembler files (with a `.s' suffix) when assembling them.

       These `-m' options are defined for the Intel 80386 family of computers:

              Control whether or not code is optimized for a 486 instead of an
              386.  Code generated for a 486 will run on a 386 and vice versa.

              Generate output containing library calls for floating point.
              Warning: the requisite libraries are not part of GNU CC.  Normally
              the facilities of the machine's usual C compiler are used, but
              this can't be done directly in cross-compilation.  You must make
              your own arrangements to provide suitable library functions for

              On machines where a function returns floating point results in the
              80387 register stack, some floating point opcodes may be emitted
              even if `-msoft-float' is used.

              Do not use the FPU registers for return values of functions.

              The usual calling convention has functions return values of types
              float and double in an FPU register, even if there is no FPU.  The
              idea is that the operating system should emulate an FPU.

              The option `-mno-fp-ret-in-387' causes such values to be returned
              in ordinary CPU registers instead.

       These `-m' options are defined for the HPPA family of computers:

              Generate code for a PA 1.0 processor.

              Generate code for a PA 1.1 processor.

              Generate code which is suitable for use in kernels.  Specifically,
              avoid add instructions in which one of the arguments is the DP
              register; generate addil instructions instead.  This avoids a
              rather serious bug in the HP-UX linker.

              Generate code that can be linked against HP-UX shared libraries.
              This option is not fully function yet, and is not on by default
              for any PA target.  Using this option can cause incorrect code to
              be generated by the compiler.

              Don't generate code that will be linked against shared libraries.
              This is the default for all PA targets.

              Generate code which allows calls to functions greater than 256K
              away from the caller when the caller and callee are in the same
              source file.  Do not turn this option on unless code refuses to
              link with “branch out of range errors from the linker.

              Prevent floating point registers from being used in any manner.
              This is necessary for compiling kernels which perform lazy context
              switching of floating point registers.  If you use this option and
              attempt to perform floating point operations, the compiler will

              Prevent the compiler from using indexing address modes.  This
              avoids some rather obscure problems when compiling MIG generated
              code under MACH.

              Add a colon to the end of label definitions (for ELF assemblers).

       These `-m' options are defined for the Intel 80960 family of computers:

              Assume the defaults for the machine type cpu-type for instruction
              and addressing-mode availability and alignment.  The default cpu-
              type is kb; other choices are ka, mc, ca, cf, sa, and sb.


              The -mnumerics option indicates that the processor does support
              floating-point instructions.  The -msoft-float option indicates
              that floating-point support should not be assumed.


              Do (or do not) attempt to alter leaf procedures to be callable
              with the bal instruction as well as call.  This will result in
              more efficient code for explicit calls when the bal instruction
              can be substituted by the assembler or linker, but less efficient
              code in other cases, such as calls via function pointers, or using
              a linker that doesn't support this optimization.


              Do (or do not) make additional attempts (beyond those of the
              machine-independent portions of the compiler) to optimize tail-
              recursive calls into branches.  You may not want to do this
              because the detection of cases where this is not valid is not
              totally complete.  The default is -mno-tail-call.


              Assume (or do not assume) that the use of a complex addressing
              mode is a win on this implementation of the i960.  Complex
              addressing modes may not be worthwhile on the K-series, but they
              definitely are on the C-series.  The default is currently
              -mcomplex-addr for all processors except the CB and CC.


              Align code to 8-byte boundaries for faster fetching (or don't
              bother).  Currently turned on by default for C-series
              implementations only.



              Enable compatibility with iC960 v2.0 or v3.0.


              Enable compatibility with the iC960 assembler.


              Do not permit (do permit) unaligned accesses.

              Enable structure-alignment compatibility with Intel's gcc release
              version 1.3 (based on gcc 1.37).  Currently this is buggy in that
              #pragma align 1 is always assumed as well, and cannot be turned

       These `-m' options are defined for the DEC Alpha implementations:


              Use (do not use) the hardware floating-point instructions for
              floating-point operations.  When -msoft-float is specified,
              functions in `libgcc1.c' will be used to perform floating-point
              operations.  Unless they are replaced by routines that emulate the
              floating-point operations, or compiled in such a way as to call
              such emulations routines, these routines will issue floating-point
              operations.   If you are compiling for an Alpha without floating-
              point operations, you must ensure that the library is built so as
              not to call them.

              Note that Alpha implementations without floating-point operations
              are required to have floating-point registers.


              Generate code that uses (does not use) the floating-point register
              set.  -mno-fp-regs implies -msoft-float.  If the floating-point
              register set is not used, floating point operands are passed in
              integer registers as if they were integers and floating-point
              results are passed in $0 instead of $f0.  This is a non-standard
              calling sequence, so any function with a floating-point argument
              or return value called by code compiled with -mno-fp-regs must
              also be compiled with that option.

              A typical use of this option is building a kernel that does not
              use, and hence need not save and restore, any floating-point

       These additional options are available on System V Release 4 for
       compatibility with other compilers on those systems:

       -G     On SVr4 systems, gcc accepts the option `-G' (and passes it to the
              system linker), for compatibility with other compilers.  However,
              we suggest you use `-symbolic' or `-shared' as appropriate,
              instead of supplying linker options on the gcc command line.

       -Qy    Identify the versions of each tool used by the compiler, in a
              .ident assembler directive in the output.

       -Qn    Refrain from adding .ident directives to the output file (this is
              the default).

              Search the directories dirs, and no others, for libraries
              specified with `-l'.  You can separate directory entries in dirs
              from one another with colons.

              Look in the directory dir to find the M4 preprocessor.  The
              assembler uses this option.

       These machine-independent options control the interface conventions used
       in code generation.

       Most of them begin with `-f'.  These options have both positive and
       negative forms; the negative form of `-ffoo' would be `-fno-foo'.  In the
       table below, only one of the forms is listed—the one which is not the
       default.  You can figure out the other form by either removing `no-' or
       adding it.

              Assume that objects reached through references are not null (C++

              Normally, GNU C++ makes conservative assumptions about objects
              reached through references.  For example, the compiler must check
              that a is not null in code like the following:

              obj &a = g (); a.f (2);

              Checking that references of this sort have non-null values
              requires extra code, however, and it is unnecessary for many
              programs.  You can use `-fnonnull-objects' to omit the checks for
              null, if your program doesn't require checking.

              Use the same convention for returning struct and union values that
              is used by the usual C compiler on your system.  This convention
              is less efficient for small structures, and on many machines it
              fails to be reentrant; but it has the advantage of allowing
              intercallability between GCC-compiled code and PCC-compiled code.

              Use the convention that struct and union values are returned in
              registers when possible.  This is more efficient for small
              structures than -fpcc-struct-return.

              If you specify neither -fpcc-struct-return nor
              -freg-struct-return, GNU CC defaults to whichever convention is
              standard for the target.  If there is no standard convention, GNU
              CC defaults to -fpcc-struct-return.

              Allocate to an enum type only as many bytes as it needs for the
              declared range of possible values.  Specifically, the enum type
              will be equivalent to the smallest integer type which has enough

              Use the same size for double as for float .

              Requests that the data and non-const variables of this compilation
              be shared data rather than private data.  The distinction makes
              sense only on certain operating systems, where shared data is
              shared between processes running the same program, while private
              data exists in one copy per process.

              Allocate even uninitialized global variables in the bss section of
              the object file, rather than generating them as common blocks.
              This has the effect that if the same variable is declared (without
              extern) in two different compilations, you will get an error when
              you link them.  The only reason this might be useful is if you
              wish to verify that the program will work on other systems which
              always work this way.

              Ignore the `#ident' directive.

              Do not output global initializations (such as C++ constructors and
              destructors) in the form used by the GNU linker (on systems where
              the GNU linker is the standard method of handling them).  Use this
              option when you want to use a non-GNU linker, which also requires
              using the collect2 program to make sure the system linker includes
              constructors and destructors.  (collect2 is included in the GNU CC
              distribution.)  For systems which must use collect2, the compiler
              driver gcc is configured to do this automatically.

              Don't output a .size assembler directive, or anything else that
              would cause trouble if the function is split in the middle, and
              the two halves are placed at locations far apart in memory.  This
              option is used when compiling `crtstuff.c'; you should not need to
              use it for anything else.

              Put extra commentary information in the generated assembly code to
              make it more readable.  This option is generally only of use to
              those who actually need to read the generated assembly code
              (perhaps while debugging the compiler itself).

              Consider all memory references through pointers to be volatile.

              Consider all memory references to extern and global data items to
              be volatile.

       -fpic  If supported for the target machines, generate position-
              independent code, suitable for use in a shared library.

       -fPIC  If supported for the target machine, emit position-independent
              code, suitable for dynamic linking, even if branches need large

              Treat the register named reg as a fixed register; generated code
              should never refer to it (except perhaps as a stack pointer, frame
              pointer or in some other fixed role).

              reg must be the name of a register.  The register names accepted
              are machine-specific and are defined in the REGISTER_NAMES macro
              in the machine description macro file.

              This flag does not have a negative form, because it specifies a
              three-way choice.

              Treat the register named reg as an allocable register that is
              clobbered by function calls.  It may be allocated for temporaries
              or variables that do not live across a call.  Functions compiled
              this way will not save and restore the register reg.

              Use of this flag for a register that has a fixed pervasive role in
              the machine's execution model, such as the stack pointer or frame
              pointer, will produce disastrous results.

              This flag does not have a negative form, because it specifies a
              three-way choice.

              Treat the register named reg as an allocable register saved by
              functions.  It may be allocated even for temporaries or variables
              that live across a call.  Functions compiled this way will save
              and restore the register reg if they use it.

              Use of this flag for a register that has a fixed pervasive role in
              the machine's execution model, such as the stack pointer or frame
              pointer, will produce disastrous results.

              A different sort of disaster will result from the use of this flag
              for a register in which function values may be returned.

              This flag does not have a negative form, because it specifies a
              three-way choice.

       Two `#pragma' directives are supported for GNU C++, to permit using the
       same header file for two purposes: as a definition of interfaces to a
       given object class, and as the full definition of the contents of that
       object class.

       #pragma interface
              (C++ only.)  Use this directive in header files that define object
              classes, to save space in most of the object files that use those
              classes.  Normally, local copies of certain information (backup
              copies of inline member functions, debugging information, and the
              internal tables that implement virtual functions) must be kept in
              each object file that includes class definitions.  You can use
              this pragma to avoid such duplication.  When a header file
              containing `#pragma interface' is included in a compilation, this
              auxiliary information will not be generated (unless the main input
              source file itself uses `#pragma implementation').  Instead, the
              object files will contain references to be resolved at link time.

       #pragma implementation

       #pragma implementation "objects.h"
              (C++ only.)  Use this pragma in a main input file, when you want
              full output from included header files to be generated (and made
              globally visible).  The included header file, in turn, should use
              `#pragma interface'.  Backup copies of inline member functions,
              debugging information, and the internal tables used to implement
              virtual functions are all generated in implementation files.

              If you use `#pragma implementation' with no argument, it applies
              to an include file with the same basename as your source file; for
              example, in `', `#pragma implementation' by itself is
              equivalent to `#pragma implementation "allclass.h"'.  Use the
              string argument if you want a single implementation file to
              include code from multiple header files.

              There is no way to split up the contents of a single header file
              into multiple implementation files.

       file.c             C source file
       file.h             C header (preprocessor) file
       file.i             preprocessed C source file
       file.C             C++ source file            C++ source file
       file.cxx           C++ source file
       file.m             Objective-C source file
       file.s             assembly language file
       file.o             object file
       a.out              link edited output
       TMPDIR/cc∗         temporary files
       LIBDIR/cpp         preprocessor
       LIBDIR/cc1         compiler for C
       LIBDIR/cc1plus     compiler for C++
       LIBDIR/collect     linker front end needed on some machines
       LIBDIR/libgcc.a    GCC subroutine library
       /lib/crt[01n].o    start-up routine
       LIBDIR/ccrt0       additional start-up routine for C++
       /lib/libc.a        standard C library, see
       /usr/include       standard directory for #include files
       LIBDIR/include     standard gcc directory for #include files
       LIBDIR/g++-include additional g++ directory for #include

       LIBDIR is usually /usr/local/lib/machine/version.
       TMPDIR comes from the environment variable TMPDIR (default /usr/tmp if
       available, else /tmp).

       cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).
       `gcc', `cpp', `as', `ld', and `gdb' entries in info.
       Using and Porting GNU CC (for version 2.0), Richard M. Stallman; The C
       Preprocessor, Richard M. Stallman; Debugging with GDB: the GNU Source-
       Level Debugger, Richard M. Stallman and Roland H. Pesch; Using as: the
       GNU Assembler, Dean Elsner, Jay Fenlason & friends; ld: the GNU linker,
       Steve Chamberlain and Roland Pesch.

       For instructions on reporting bugs, see the GCC manual.

       Copyright 1991, 1992, 1993 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 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 this permission notice may be included in translations
       approved by the Free Software Foundation instead of in the original

       See the GNU CC Manual for the contributors to GNU CC.

GNU Tools                          1998/12/16                             GCC(1)