cc man page on OPENSTEP

Man page or keyword search:  
man Server   1419 pages
apropos Keyword Search (all sections)
Output format
OPENSTEP logo
[printable version]


CC(1)									 CC(1)

NAME
       cc, cc++ - GNU C and C++ Compiler

SYNOPSIS
       cc [ option | filename ]...
       cc++ [ option | filename ]...

DESCRIPTION
       cc  handles  C, Objective-C, C++, and Objective-C++ source files.  cc++
       is not needed (but is still present for compatibility).	 cc  processes
       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:

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

       cc++   assumes  preprocessed  (.ii) files are C++ and assumes C++ style
	      linking.

       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
       .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
       include:

       .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.

       cc has been substantially modified and extended by NeXT Computer,  Inc.
       to  support  the	 use  of  Objective-C,	Objective-C++,	and Mach.  For
       documentation, see the NeXT Developer's Library (accessible through the
       NeXT Developer target of the Digital Librarian).

OPTIONS
       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
	      -fno-strict-prototype -fsigned-bitfields -fsigned-char
	      -fthis-is-variable -funsigned-bitfields -funsigned-char
	      -fwritable-strings -traditional -traditional-cpp -trigraphs
	      -ObjC -ObjC++ -posix -posixstrict

       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 -Winline -Wmissing-prototypes
	      -Wnested-externs -Wno-import -Wparentheses -Wpointer-arith
	      -Wredundant-decls -Wreturn-type -Wshadow -Wstrict-prototypes
	      -Wswitch -Wtemplate-debugging -Wtraditional -Wtrigraphs
	      -Wuninitialized -Wunused -Wwrite-strings -Wprecomp -Wno-precomp

       Debugging Options
	      -a -dletters -fpretend-float -g -glevel -ggdb -p -pg -save-temps
	      -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

       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 -precomp -no-precomp

       Assembler Option
	      -Wa,option

       Linker Options
	      -llibrary -nostartfiles -nostdlib -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

	      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 -mtrailing-colon

       Code Generation Options
	      -fcall-saved-reg -fcall-used-reg -ffixed-reg
	      -finhibit-size-directive -fnonnull-objects -fno-common
	      -fno-gnu-linker -fpcc-struct-return -freg-struct-returno
	      -fshared-data -fshort-enums -fshort-double -fvolatile
	      -fvolatile-global -fverbose-asm

OVERALL OPTIONS
       -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
	      `assembler-with-cpp'.

       -x none
	      Turn  off	 any  specification  of a language, so that subsequent
	      files are handled according to their file name suffixes (as they
	      are if `-x' has not been used at all).

       If  you	want  only  some  of  the  four	 stages	 (preprocess, compile,
       assemble, link), you can use `-x' (or filename suffixes) to  tell  cc
       where  to  start,  and  one  of the options `-c', `-S', or `-E' to tell
       where cc	 to stop.  Note	 that  some  combinations  (for	 example,  `-x
       cpp-output -E') instruct cc 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
	      file.

	      By  default,  cc 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.

	      cc  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 specified.

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

	      cc 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.

	      cc ignores input files which don't require preprocessing.

       -o file
	      Place output in file file.  This applies regardless to  whatever
	      sort of output cc produces, 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
	      proper.

       -pipe  Use pipes rather than temporary files for communication  between
	      the  various  stages of compilation.  This fails to work on some
	      systems where the assembler cannot read from a pipe; but the GNU
	      assembler has no trouble.

LANGUAGE OPTIONS
       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 cc 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
	      identifiers.

	      The  alternate  keywords	__asm__, __extension__, __inline__ and
	      __typeof__ continue to work despite `-ansi'.  You would not want
	      to use them in an ANSI C program, of course, but it is useful to
	      put them in header files that might be included in  compilations
	      done with `-ansi'.  Alternate predefined macros such as __unix__
	      and __vax__ are also available, with or without `-ansi'.

	      The `-ansi' option  does	not  cause  non-ANSI  programs	to  be
	      rejected	gratuitously.	For  that,  `-pedantic' is required in
	      addition to `-ansi'.

	      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 things.

       -fno-asm
	      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'.

       -fno-builtin
	      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
	      functions.

       -fno-strict-prototype
	      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.

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

       -traditional
	      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'.

       -traditional-cpp
	      Use    the    regular   GNU   preprocessor   rather   than   the
	      NEXTSTEP-specific cpp-precomp option.  Precompiled  headers  are
	      not supported when `-traditional-cpp' is used.

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

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

       -fexternal-templates
	      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.

       -fall-virtual
	      Treat all possible member functions as virtual, implicitly.  All
	      member functions (except for constructor functions  and  new  or
	      delete member operators) are treated as virtual functions of the
	      class where they appear.

	      This does not mean that all calls to these member functions will
	      be  made through the internal table of virtual functions.	 Under
	      some circumstances, the compiler can determine that a call to  a
	      given  virtual function can be made directly; in these cases the
	      calls are direct in any case.

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

       -fthis-is-variable
	      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-
	      variable'.

       -funsigned-char
	      Let the type char be unsigned, like unsigned char.

	      Each  kind of machine has a default for what char should be.  It
	      is either like unsigned char by default or like signed  char  by
	      default.

	      Ideally,	a  portable  program  should always use signed char or
	      unsigned char when it depends on the signedness  of  an  object.
	      But many programs have been written to use plain char and expect
	      it to be signed, or expect it to be unsigned, depending  on  the
	      machines	they  were written for.	 This option, and its inverse,
	      let you make such a program work with the opposite default.

	      The type char is always a distinct type from each of signed char
	      and  unsigned char, even though its behavior is always just like
	      one of those two.

       -fsigned-char
	      Let the type char be signed, like signed char.

	      Note that this is equivalent to `-fno-unsigned-char',  which  is
	      the    negative	 form	 of    `-funsigned-char'.    Likewise,
	      `-fno-signed-char' is equivalent to `-funsigned-char'.

       -fsigned-bitfields

       -funsigned-bitfields

       -fno-signed-bitfields

       -fno-unsigned-bitfields
	      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.

       -fwritable-strings
	      Store  string  constants	in the writable data segment and don't
	      uniquize them.  This is  for  compatibility  with	 old  programs
	      which   assume   they   can   write   into   string   constants.
	      `-traditional' also has this effect.

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

       -ObjC  Specify  that  the  file	should	be  compiled as an Objective-C
	      source program.

       -ObjC++
	      Specify that the file should be  compiled	 as  an	 Objective-C++
	      source program.

       -posix Specify  that  the  file	should	be  compiled as a POSIX 1003.1
	      conforming source program. Note that POSIX kernel interfaces are
	      not  supported  for  NEXTSTEP  applications.  The	 POSIX	kernal
	      interfaces are supported only for C source files.

       -posixstrict
	      Specify that the file should  be	compiled  as  a	 strict	 POSIX
	      1003.1 conforming source program without optional features. Note
	      that POSIX kernel interfaces  are	 not  supported	 for  NEXTSTEP
	      applications. The POSIX kernal interfaces are supported only for
	      C source files.

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

       If you use the `-E' option, cc 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
	      written.

       -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'
	      options.

       -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'.

       -nostdinc
	      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.

       -nostdinc++
	      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 flags).

       -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' option.

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

       -M     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 program.

	      `-M' implies `-E'.

       -MM    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' does.

	      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.

       -Aquestion(answer)
	      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 machine.

       -Aquestion
	      (answer)	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 machine.

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

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

       -Umacro
	      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.

       -precomp
	      Produce a precompiled header.

       -no-precomp
	      Do not use precompiled headers.

       ASSEMBLER OPTION

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

LINKER OPTIONS
       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.

       object-file-name
	      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 cc does a link step, these object files are  used
	      as input to the linker.

       -llibrary
	      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 directories.

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

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

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

       -symbolic
	      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 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 expects.

       -Wl,option
	      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
	      modules.

DIRECTORY OPTIONS
       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
	      `-l'.

       -Bprefix
	      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',  `cc1obj' (or, for C++, `cc1objplus'), `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 the directory `libarch/'.
	      Otherwise, the  compiler	driver	searches  for  the  unmodified
	      program  name,  using  the  directories specified in your `PATH'
	      environment variable.

	      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.

WARNING OPTIONS
       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 cc:

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

       -w     Inhibit all warning messages.

       -Wno-import
	      Inhibit warning messages about the use of #import.

       -pedantic
	      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.

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

       -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
	      compilation.

	      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 cc does not realize that
	      certain functions	 (including  abort  and	 longjmp)  will	 never
	      return.

	  ·   An expression-statement contains no side effects.

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

       -Wimplicit
	      Warn whenever a function or parameter is implicitly declared.

       -Wreturn-type
	      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.

       -Wunused
	      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.

       -Wswitch
	      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.

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

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

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

       -Wchar-subscripts
	      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.

       -Wuninitialized
	      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 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;
		    break;
		  case 2: x = 4;
		    break;
		  case 3: x = 5;
		  }
		foo (x);
	      }

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

	      {
		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.

       -Wparentheses
	      Warn if parentheses are omitted in certain contexts.

       -Wtemplate-debugging
	      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.

       -Wtraditional
	      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.

       -Wshadow
	      Warn whenever a local variable shadows another local variable.

       -Wid-clash-len
	      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.

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

       -Wcast-qual
	      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 ∗.

       -Wcast-align
	      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.

       -Wwrite-strings
	      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.

       -Wconversion
	      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
	      promotion.

       -Waggregate-return
	      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.)

       -Wstrict-prototypes
	      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.)

       -Wmissing-prototypes
	      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.

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

       -Wnested-externs
	      Warn if an extern declaration is encountered within an function.

       -Wenum-clash
	      Warn about conversion between different enumeration  types  (C++
	      only).

       -Woverloaded-virtual
	      (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.

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

       -Wprecomp
	      Warn if a precompiled header cannot be used.

       -Wno-precomp
	      Suppress warnings when a precompiled header cannot be used.

       -Werror
	      Treat warnings as errors; abort compilation after any warning.

DEBUGGING OPTIONS
       cc has various special options that are used for debugging either  your
       program or cc:

       -g     Produce  debugging  information in the operating system's native
	      format.  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.

	      Unlike  most  other  C compilers, 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  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.

       -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 data.

       -dletters
	      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
	      `file.sched2'.

       -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.

       -fpretend-float
	      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 cc
	      would make when running on the target machine.

       -save-temps
	      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-libgcc-file-name
	      Print the full absolute name of the library file `libgcc.a' that
	      would be used when linking—and do not do	anything  else.	  With
	      this  option,  cc	 does  not  compile  or link anything; it just
	      prints the file name.

OPTIMIZATION OPTIONS
       These options control various sorts of optimizations:

       -O

       -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
	      time.

	      When you specify `-O', `-fthread-jumps'  and  `-fdelayed-branch'
	      are  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.  As compared
	      to -O, this option  increases  both  compilation	time  and  the
	      performance of the generated code.

	      -O2  turns  on all -fflag options that enable more optimization,
	      except	for	-funroll-loops,	    -funroll-all-loops	   and
	      -fomit-frame-pointer.

       -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.

       -ffloat-store
	      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.

       -fmemoize-lookups

       -fsave-memoized
	      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 this

		cout << "This " << p << " has " << n << " legs.\n";

	      makes six passes through all three steps.	 By using  a  software
	      cache,  a “hit” significantly reduces this cost.	Unfortunately,
	      using the cache introduces another  layer	 of  mechanisms	 which
	      must   be	  implemented,	 and   so  incurs  its	own  overhead.
	      `-fmemoize-lookups' enables the software cache.

	      Because access privileges (visibility)  to  members  and	member
	      functions	 may  differ from one function context to the next, cc
	      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.

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

       -fno-defer-pop
	      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.

       -fforce-mem
	      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.

       -fforce-addr
	      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.

       -fomit-frame-pointer
	      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 machines.

	      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.

       -finline-functions
	      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 cc normally does not output
	      the function as assembler code in its own right.

       -fcaller-saves
	      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.

       -fkeep-inline-functions
	      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.

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

	      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.

       -fno-peephole
	      Disable any machine-specific peephole optimizations.

       -ffast-math
	      This   option   allows   cc   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 functions.

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

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

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

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

       -fthread-jumps
	      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 false.

       -funroll-loops
	      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.

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

       -fcse-follow-jumps
	      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.

       -fcse-skip-blocks
	      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.

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

       -felide-constructors
	      Elide constructors when this seems plausible (C++	 only).	  With
	      this  flag,  cc  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, cc  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 valyue 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.

       -fexpensive-optimizations
	      Perform  a  number  of  minor  optimizations that are relatively
	      expensive.

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

       -fschedule-insns
	      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.

       -fschedule-insns2
	      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.

MACHINE DEPENDENT OPTIONS
       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:

       -m68000

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

       -m68020

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

       -m68881
	      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.

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

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

       -m68020-40
	      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
	      point.

       -msoft-float
	      Generate output containing library  calls	 for  floating	point.
	      WARNING:	the  requisite	libraries  are	not  part of the GNU C
	      compiler.	 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 cross-compilation.

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

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

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

       -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 Intel 80386 family of computers:

       -m486

       -mno-486
	      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.

       -msoft-float
	      Generate	output	containing  library  calls for floating point.
	      Warning: the requisite libraries are  not	 part  of  the	GNU  C
	      compiler.	  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 cross-compilation.

	      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.

       -mno-fp-ret-in-387
	      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:

       -mpa-risc-1-0
	      Generate code for a PA 1.0 processor.

       -mpa-risc-1-1
	      Generate code for a PA 1.1 processor.

       -mkernel
	      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.

       -mshared-libs
	      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.

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

       -mlong-calls
	      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.

       -mdisable-fpregs
	      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 abort.

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

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

CODE GENERATION OPTIONS
       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.

       -fnonnull-objects
	      Assume that objects reached through references are not null (C++
	      only).

	      Normally,	  cc  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.

       -fpcc-struct-return
	      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.

       -freg-struct-return
	      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, cc  defaults	 to  whichever	convention  is
	      standard for the target.	If there is no standard convention, cc
	      defaults to -fpcc-struct-return.

       -fshort-enums
	      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
	      room.

       -fshort-double
	      Use the same size for double as for float .

       -fshared-data
	      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.

       -fno-common
	      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.

       -fno-gnu-linker
	      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 C distribution.)  For systems which must use
	      collect2, the compiler driver  gcc  is  configured  to  do  this
	      automatically.

       -finhibit-size-directive
	      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.

       -fverbose-asm
	      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).

       -fvolatile
	      Consider all memory references through pointers to be volatile.

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

       -ffixed-reg
	      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.

       -fcall-used-reg
	      Treat the register named reg as an allocatable 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.

       -fcall-saved-reg
	      Treat the register named reg as an allocatable 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 cc,  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	 `allclass.cc',	 `#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.

FILES
       file.c		  C source file
       file.h		  C header (preprocessor) file
       file.i		  preprocessed C source file
       file.C		  C++ source file
       file.cc		  C++ source file
       file.cxx		  C++ source file
       file.m		  Objective-C source file
       file.M		  Objective-C++ source file
       file.s		  assembly language file
       file.o		  object file
       a.out		  link edited output
       tmp/cc∗		  temporary files
       lib/archcpp	  preprocessor
       lib/archcc1	  compiler for C
       lib/archcc1objplus
			  compiler for C++
       lib/archcollect	  linker front end needed on some machines
       libcrt[01n].o	  start-up routine
       lib/archccrt0	  additional start-up routine for C++
       liblibc.a	  standard C library, see intro(3)
       usrinclude	  standard directory for #include files
       lib/archinclude	  standard cc directory for #include files
       lib/archg++include
			  additional cc directory for #include files

SEE ALSO
       gdb(1), ld(1)

Free Software Foundation, Inc.	 June 15, 1989				 CC(1)
[top]
                             _         _         _ 
                            | |       | |       | |     
                            | |       | |       | |     
                         __ | | __ __ | | __ __ | | __  
                         \ \| |/ / \ \| |/ / \ \| |/ /  
                          \ \ / /   \ \ / /   \ \ / /   
                           \   /     \   /     \   /    
                            \_/       \_/       \_/ 
More information is available in HTML format for server OPENSTEP

List of man pages available for OPENSTEP

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net