Spec-Zone.ru › GCC 4

3.6 Параметры, управляющие диалектами Objective-C и Objective-C++

(ПРИМЕЧАНИЕ: В этом руководстве не описываются сами языки Objective-C и Objective-C++. См. Стандарты языков, поддерживаемые GCC для ссылок.)

В этом разделе описываются параметры командной строки, которые имеют смысл только для программ Objective-C и Objective-C++. Вы также можете использовать большинство языковых параметров GNU компилятора. Например, вы можете скомпилировать файл some_class.m следующим образом:

gcc -g -fgnu-runtime -O -c some_class.m

В этом примере -fgnu-runtime — параметр, предназначенный только для программ Objective-C и Objective-C++; вы можете использовать другие параметры с любым языком, поддерживаемым GCC.

Обратите внимание, что поскольку Objective-C является расширением языка C, компиляции Objective-C могут также использовать параметры, специфичные для C-фронта (например, -Wtraditional). Аналогично, компиляции Objective-C++ могут использовать параметры, специфичные для C++ (например, -Wabi).

Вот список параметров, которые предназначены только для компиляции программ Objective-C и Objective-C++:

-fconstant-string-class=имя-класса
Используйте имя-класса в качестве имени класса для создания экземпляра каждого литерального строкового значения, заданного с помощью синтаксиса @"...". По умолчанию имя класса — NXConstantString при использовании GNU-времени выполнения и NSConstantString при использовании NeXT-времени выполнения (см. ниже). Параметр -fconstant-cfstrings, если он также присутствует, переопределяет настройку -fconstant-string-class и вызывает расположение литералов @"..." в виде константных строк CoreFoundation.
-fgnu-runtime
Генерировать объектный код, совместимый со стандартным временем выполнения GNU Objective-C. Это значение по умолчанию для большинства типов систем.
-fnext-runtime
Генерировать выходные данные, совместимые с временем выполнения NeXT. Это значение по умолчанию для систем на базе NeXT, включая Darwin и Mac OS X. Макрос __NEXT_RUNTIME__ определен, если (и только если) используется этот параметр.
-fno-nil-receivers
Предполагать, что все диспетчеризации сообщений Objective-C ([receiver message:arg]) в этом блоке трансляции гарантируют, что получатель не nil. Это позволяет использовать более эффективные точки входа во время выполнения. Этот параметр доступен только в сочетании с временем выполнения NeXT и версией ABI 0 или 1.
-fobjc-abi-version=n
Использовать версию n ABI Objective-C для выбранного времени выполнения. В настоящее время этот параметр поддерживается только для времени выполнения NeXT. В этом случае версия 0 — это традиционная (32-битная) ABI без поддержки свойств и других дополнений Objective-C 2.0. Версия 1 — это традиционная (32-битная) ABI с поддержкой свойств и других дополнений Objective-C 2.0. Версия 2 — современная (64-битная) ABI. Если ничего не указано, по умолчанию используется версия 0 на 32-битных целевых машинах и версия 2 на 64-битных целевых машинах.
-fobjc-call-cxx-cdtors
Для каждого класса Objective-C проверить, являются ли какие-либо из его переменных экземпляра объектами C++ с нетривиальным конструктором по умолчанию. Если это так, синтезировать специальный метод экземпляра - (id) .cxx_construct, который выполняет нетривиальные конструкторы по умолчанию для всех таких переменных экземпляров в порядке и затем возвращает self. Аналогично, проверить, является ли какая-либо переменная экземпляра объектом C++ с нетривиальным деструктором, и если да, синтезировать специальный метод - (void) .cxx_destruct, который выполняет все такие деструкторы по умолчанию в обратном порядке.

Методы - (id) .cxx_construct и - (void) .cxx_destruct таким образом генерируются только для переменных экземпляров, объявленных в текущем классе Objective-C, а не для тех, унаследованных от родительских классов. От времени выполнения Objective-C требуется вызывать все такие методы в иерархии наследования объекта. Методы - (id) .cxx_construct вызываются временем выполнения сразу после выделения нового экземпляра объекта; методы - (void) .cxx_destruct вызываются сразу перед выделением экземпляра объекта временем выполнения.

На момент написания этой статьи поддержка вызова методов - (id) .cxx_construct и - (void) .cxx_destruct существует только в времени выполнения NeXT на Mac OS X 10.4 и более поздних версиях.

-fobjc-direct-dispatch
Разрешить быстрые переходы к диспетчеру сообщений. В Darwin это реализуется с помощью страницы связи.
-fobjc-exceptions
Включить синтаксическую поддержку обработки структурированных исключений в Objective-C, аналогично тому, что предлагают C++ и Java. Этот параметр необходим для использования ключевых слов Objective-C @try, @throw, @catch, @finally и @synchronized. Этот параметр доступен как с GNU-временем выполнения, так и с NeXT-временем выполнения (но не доступен в сочетании с NeXT-временем выполнения на Mac OS X 10.2 и более ранних версиях).
-fobjc-gc
Включить сборку мусора (GC) в программах Objective-C и Objective-C++. Этот параметр доступен только с NeXT-временем выполнения; GNU-время выполнения имеет другую реализацию сборки мусора, которая не требует специальных флагов компилятора.
-fobjc-nilcheck
Для времени выполнения NeXT с версией 2 ABI проверять наличие nil-получателя в вызовах методов перед выполнением фактического вызова метода. Это значение по умолчанию и может быть отключено с помощью -fno-objc-nilcheck. Классовые методы и вызовы super никогда не проверяются на nil таким образом независимо от того, каким образом установлен этот флаг. В настоящее время этот флаг не выполняет никаких действий при использовании GNU-времени выполнения или более ранней версии ABI времени выполнения NeXT.
-fobjc-std=objc1
Соответствовать синтаксису языка Objective-C 1.0, признаваемому GCC 4.0. Это влияет только на дополнения Objective-C к языку C/C++; это не влияет на соответствие стандартам C/C++, которые управляются отдельными флагами параметров диалекта C/C++. При использовании этого параметра с компилятором Objective-C или Objective-C++ любой синтаксис Objective-C, который не распознаётся GCC 4.0, отклоняется. Это полезно, если вам нужно убедиться, что ваш код Objective-C может быть скомпилирован с более старыми версиями GCC.
-freplace-objc-classes
Выдать специальный маркер, инструктирующий ld(1) не выполнять статическую компоновку в результирующем объектном файле и позволять dyld(1) загружать его во время выполнения вместо этого. Это используется в сочетании с режимом отладки Fix-and-Continue, где объектный файл может быть перекомпилирован и динамически загружен во время выполнения программы без необходимости перезапуска самой программы. В настоящее время функция Fix-and-Continue доступна только в сочетании с NeXT-временем выполнения на Mac OS X 10.3 и более поздних версиях.
-fzero-link
При компиляции для времени выполнения NeXT компилятор обычно заменяет вызовы objc_getClass("...") (когда имя класса известно во время компиляции) статическими ссылками на классы, которые инициализируются во время загрузки, что улучшает производительность во время выполнения. Указание флага -fzero-link подавляет это поведение и приводит к сохранению вызовов objc_getClass("..."). Это полезно в режиме отладки Zero-Link, поскольку позволяет изменять отдельные реализации классов во время выполнения программы. GNU-время выполнения в настоящее время всегда сохраняет вызовы objc_get_class("...") независимо от параметров командной строки.
-gen-decls
Вывести объявления интерфейсов для всех классов, увиденных в исходном файле, в файл с именем имя-исходника.decl.
-Wassign-intercept (Только Objective-C и Objective-C++)
Предупреждать всякий раз, когда присваивание Objective-C перехватывается сборщиком мусора.
-Wno-protocol (Только Objective-C и Objective-C++)
Если класс объявлен для реализации протокола, выводится предупреждение для каждого метода в протоколе, который не реализован классом. По умолчанию выводится предупреждение для каждого метода, не реализованного явно в классе, даже если реализация метода унаследована от родительского класса. Если используется параметр -Wno-protocol, то методы, унаследованные от родительского класса, считаются реализованными, и для них не выдается предупреждение.
-Wselector (Только Objective-C и Objective-C++)
Выдавать предупреждение, если во время компиляции обнаружено несколько методов разных типов для одного селектора. Проверка выполняется по списку методов на последнем этапе компиляции. Кроме того, выполняется проверка для каждого селектора, появляющегося в выражении @selector(...), и соответствующего метода для этого селектора, обнаруженного во время компиляции. Поскольку эти проверки сканируют таблицу методов только в конце компиляции, эти предупреждения не генерируются, если последний этап компиляции не достигнут, например, из-за обнаружения ошибки во время компиляции или из-за использования параметра -fsyntax-only.
-Wstrict-selector-match (Только Objective-C и Objective-C++)
Выдавать предупреждение, если обнаружено несколько методов с различными типами аргументов и/или возвращаемых значений для данного селектора при попытке отправки сообщения с помощью этого селектора получателю типа id или Class. Если этот флаг выключен (что является по умолчанию поведением), компилятор пропускает такие предупреждения, если обнаруженные различия ограничиваются типами, которые имеют одинаковый размер и выравнивание.
-Wundeclared-selector (Только Objective-C и Objective-C++)
Выдавать предупреждение, если найдено выражение @selector(...), относящееся к необъявленному селектору. Селектор считается необъявленным, если ни один метод с таким именем не был объявлен до выражения @selector(...), ни явно в объявлении @interface или @protocol, ни неявно в секции @implementation. Этот параметр всегда выполняет свои проверки сразу после обнаружения выражения @selector(...), в то время как -Wselector выполняет свои проверки только на последнем этапе компиляции. Это также навязывает соглашение по стилю кодирования о том, что методы и селекторы должны быть объявлены до использования.
-print-objc-runtime-info
Генерировать заголовок C, описывающий самую большую структуру, передаваемую по значению, если таковая имеется.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-4.9.4/gcc/Objective-C-and-Objective-C_002b_002b-Dialect-Options.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API