BBS水木清华站∶精华区

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,  GNU  C++  makes conservative assumptions 
              about objects reached through references.  For  ex- 
              ample,  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 un- 
              necessary  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 allow- 
              ing  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, GNU CC defaults  to  whichever 
              convention is standard for the target.  If there is 
              no  standard  convention,  GNU   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 be- 
              tween 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  gener- 
              ating  them  as common blocks.  This has the effect 
              that if the same variable is declared (without  ex- 
              tern)  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-ident 
              Ignore the `#ident' directive. 
 
       -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  CC 
              distribution.)   For  systems  which  must use col- 
              lect2, the compiler driver gcc is configured to  do 
              this automatically. 
 
       -finhibit-size-directive 
              Don't  output  a .size assembler directive, or any- 
              thing 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  op- 
              tion  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 op- 
              tion 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. 
 
       -fpic  If supported for the target machines, generate  po- 
              sition-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 displacements. 
 
       -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 descrip- 
              tion 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 reg- 
              ister 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 reg- 
              ister 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. 

BBS水木清华站∶精华区