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水木清华站∶精华区