компилятор C и C ++ проекта GNU (GNU project C and C++ compiler)
Параметры подробно (Options detail)
Controlling Objective-C and Objective-C++ Dialects
(NOTE: This manual does not describe the Objective-C and
Objective-C++ languages themselves.
This section describes the command-line options that are only
meaningful for Objective-C and Objective-C++ programs. You can
also use most of the language-independent GNU compiler options.
For example, you might compile a file some_class.m like this:
gcc -g -fgnu-runtime -O -c some_class.m
In this example, -fgnu-runtime
is an option meant only for
Objective-C and Objective-C++ programs; you can use the other
options with any language supported by GCC.
Note that since Objective-C is an extension of the C language,
Objective-C compilations may also use options specific to the C
front-end (e.g., -Wtraditional
). Similarly, Objective-C++
compilations may use C++-specific options (e.g., -Wabi
).
Here is a list of options that are only for compiling Objective-C
and Objective-C++ programs:
-fconstant-string-class=
class-name
Use class-name as the name of the class to instantiate for
each literal string specified with the syntax "@"..."". The
default class name is "NXConstantString" if the GNU runtime
is being used, and "NSConstantString" if the NeXT runtime is
being used (see below). The -fconstant-cfstrings
option, if
also present, overrides the -fconstant-string-class
setting
and cause "@"..."" literals to be laid out as constant
CoreFoundation strings.
-fgnu-runtime
Generate object code compatible with the standard GNU
Objective-C runtime. This is the default for most types of
systems.
-fnext-runtime
Generate output compatible with the NeXT runtime. This is
the default for NeXT-based systems, including Darwin and Mac
OS X. The macro "__NEXT_RUNTIME__" is predefined if (and
only if) this option is used.
-fno-nil-receivers
Assume that all Objective-C message dispatches ("[receiver
message:arg]") in this translation unit ensure that the
receiver is not "nil". This allows for more efficient entry
points in the runtime to be used. This option is only
available in conjunction with the NeXT runtime and ABI
version 0 or 1.
-fobjc-abi-version=
n
Use version n of the Objective-C ABI for the selected
runtime. This option is currently supported only for the
NeXT runtime. In that case, Version 0 is the traditional
(32-bit) ABI without support for properties and other
Objective-C 2.0 additions. Version 1 is the traditional
(32-bit) ABI with support for properties and other Objective-
C 2.0 additions. Version 2 is the modern (64-bit) ABI. If
nothing is specified, the default is Version 0 on 32-bit
target machines, and Version 2 on 64-bit target machines.
-fobjc-call-cxx-cdtors
For each Objective-C class, check if any of its instance
variables is a C++ object with a non-trivial default
constructor. If so, synthesize a special "- (id)
.cxx_construct" instance method which runs non-trivial
default constructors on any such instance variables, in
order, and then return "self". Similarly, check if any
instance variable is a C++ object with a non-trivial
destructor, and if so, synthesize a special "- (void)
.cxx_destruct" method which runs all such default
destructors, in reverse order.
The "- (id) .cxx_construct" and "- (void) .cxx_destruct"
methods thusly generated only operate on instance variables
declared in the current Objective-C class, and not those
inherited from superclasses. It is the responsibility of the
Objective-C runtime to invoke all such methods in an object's
inheritance hierarchy. The "- (id) .cxx_construct" methods
are invoked by the runtime immediately after a new object
instance is allocated; the "- (void) .cxx_destruct" methods
are invoked immediately before the runtime deallocates an
object instance.
As of this writing, only the NeXT runtime on Mac OS X 10.4
and later has support for invoking the "- (id)
.cxx_construct" and "- (void) .cxx_destruct" methods.
-fobjc-direct-dispatch
Allow fast jumps to the message dispatcher. On Darwin this
is accomplished via the comm page.
-fobjc-exceptions
Enable syntactic support for structured exception handling in
Objective-C, similar to what is offered by C++. This option
is required to use the Objective-C keywords @try, @throw,
@catch, @finally and @synchronized. This option is available
with both the GNU runtime and the NeXT runtime (but not
available in conjunction with the NeXT runtime on Mac OS X
10.2 and earlier).
-fobjc-gc
Enable garbage collection (GC) in Objective-C and
Objective-C++ programs. This option is only available with
the NeXT runtime; the GNU runtime has a different garbage
collection implementation that does not require special
compiler flags.
-fobjc-nilcheck
For the NeXT runtime with version 2 of the ABI, check for a
nil receiver in method invocations before doing the actual
method call. This is the default and can be disabled using
-fno-objc-nilcheck
. Class methods and super calls are never
checked for nil in this way no matter what this flag is set
to. Currently this flag does nothing when the GNU runtime,
or an older version of the NeXT runtime ABI, is used.
-fobjc-std=objc1
Conform to the language syntax of Objective-C 1.0, the
language recognized by GCC 4.0. This only affects the
Objective-C additions to the C/C++ language; it does not
affect conformance to C/C++ standards, which is controlled by
the separate C/C++ dialect option flags. When this option is
used with the Objective-C or Objective-C++ compiler, any
Objective-C syntax that is not recognized by GCC 4.0 is
rejected. This is useful if you need to make sure that your
Objective-C code can be compiled with older versions of GCC.
-freplace-objc-classes
Emit a special marker instructing ld
(1) not to statically
link in the resulting object file, and allow dyld
(1) to load
it in at run time instead. This is used in conjunction with
the Fix-and-Continue debugging mode, where the object file in
question may be recompiled and dynamically reloaded in the
course of program execution, without the need to restart the
program itself. Currently, Fix-and-Continue functionality is
only available in conjunction with the NeXT runtime on Mac OS
X 10.3 and later.
-fzero-link
When compiling for the NeXT runtime, the compiler ordinarily
replaces calls to "objc_getClass("...")" (when the name of
the class is known at compile time) with static class
references that get initialized at load time, which improves
run-time performance. Specifying the -fzero-link
flag
suppresses this behavior and causes calls to
"objc_getClass("...")" to be retained. This is useful in
Zero-Link debugging mode, since it allows for individual
class implementations to be modified during program
execution. The GNU runtime currently always retains calls to
"objc_get_class("...")" regardless of command-line options.
-fno-local-ivars
By default instance variables in Objective-C can be accessed
as if they were local variables from within the methods of
the class they're declared in. This can lead to shadowing
between instance variables and other variables declared
either locally inside a class method or globally with the
same name. Specifying the -fno-local-ivars
flag disables
this behavior thus avoiding variable shadowing issues.
-fivar-visibility=
[public
|protected
|private
|package
]
Set the default instance variable visibility to the specified
option so that instance variables declared outside the scope
of any access modifier directives default to the specified
visibility.
-gen-decls
Dump interface declarations for all classes seen in the
source file to a file named sourcename.decl.
-Wassign-intercept
(Objective-C and Objective-C++ only)
Warn whenever an Objective-C assignment is being intercepted
by the garbage collector.
-Wno-protocol
(Objective-C and Objective-C++ only)
If a class is declared to implement a protocol, a warning is
issued for every method in the protocol that is not
implemented by the class. The default behavior is to issue a
warning for every method not explicitly implemented in the
class, even if a method implementation is inherited from the
superclass. If you use the -Wno-protocol
option, then
methods inherited from the superclass are considered to be
implemented, and no warning is issued for them.
-Wselector
(Objective-C and Objective-C++ only)
Warn if multiple methods of different types for the same
selector are found during compilation. The check is
performed on the list of methods in the final stage of
compilation. Additionally, a check is performed for each
selector appearing in a "@selector(...)" expression, and a
corresponding method for that selector has been found during
compilation. Because these checks scan the method table only
at the end of compilation, these warnings are not produced if
the final stage of compilation is not reached, for example
because an error is found during compilation, or because the
-fsyntax-only
option is being used.
-Wstrict-selector-match
(Objective-C and Objective-C++ only)
Warn if multiple methods with differing argument and/or
return types are found for a given selector when attempting
to send a message using this selector to a receiver of type
"id" or "Class". When this flag is off (which is the default
behavior), the compiler omits such warnings if any
differences found are confined to types that share the same
size and alignment.
-Wundeclared-selector
(Objective-C and Objective-C++ only)
Warn if a "@selector(...)" expression referring to an
undeclared selector is found. A selector is considered
undeclared if no method with that name has been declared
before the "@selector(...)" expression, either explicitly in
an @interface or @protocol declaration, or implicitly in an
@implementation section. This option always performs its
checks as soon as a "@selector(...)" expression is found,
while -Wselector
only performs its checks in the final stage
of compilation. This also enforces the coding style
convention that methods and selectors must be declared before
being used.
-print-objc-runtime-info
Generate C header describing the largest structure that is
passed by value, if any.