Spec-Zone.ru › GCC 12

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=class-name

Используйте class-name в качестве имени класса для инициализации каждого литерального строкового значения, указанного синтаксисом @"…". По умолчанию используется имя класса 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 Objective-C ABI для выбранной среды выполнения. Эта опция в настоящее время поддерживается только для среды выполнения 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 вызываются непосредственно перед тем, как среда выполнения освобождает экземпляр объекта.

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

-fobjc-direct-dispatch

Разрешить быстрые переходы к диспетчеру сообщений. В Darwin это достигается с помощью страницы comm.

-fobjc-exceptions

Включить синтаксическую поддержку обработки структурированных исключений в Objective-C, аналогично тому, что предлагается в C++. Эта опция требуется для использования ключевых слов 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("…") независимо от параметров командной строки.

-fno-local-ivars

По умолчанию переменные экземпляров в Objective-C могут быть доступны как локальные переменные изнутри методов класса, в котором они объявлены. Это может привести к конфликту имен между переменными экземпляра и другими переменными, объявленными локально внутри метода класса или глобально с тем же именем. Указание флага -fno-local-ivars отключает это поведение, тем самым предотвращая проблемы с конфликтом имен переменных.

-fivar-visibility=[public|protected|private|package]

Установить видимость переменных экземпляра по умолчанию на указанную опцию, так что переменные экземпляра, объявленные вне области каких-либо директив модификаторов доступа, по умолчанию имеют указанную видимость.

-gen-decls

Вывести объявления интерфейсов для всех классов, найденных в исходном файле, в файл с именем sourcename.decl.

-Wassign-intercept (Objective-C and Objective-C++ only)

Предупреждать, когда оператор присваивания Objective-C перехватывается сборщиком мусора.

-Wno-property-assign-default (Objective-C and Objective-C++ only)

Не предупреждать, если для свойства объекта Objective-C не указано семантики присваивания.

-Wno-protocol (Objective-C and Objective-C++ only)

Если класс объявлен для реализации протокола, выводится предупреждение для каждого метода в протоколе, который не реализован классом. По умолчанию выводится предупреждение для каждого метода, не реализованного явно в классе, даже если реализация метода унаследована от суперкласса. Если вы используете опцию -Wno-protocol, то методы, унаследованные от суперкласса, считаются реализованными, и для них не выдается предупреждение.

-Wobjc-root-class (Objective-C and Objective-C++ only)

Предупреждать, если интерфейс класса не имеет суперкласса. Большинство классов унаследуются от NSObject (или Object) например. При объявлении классов, предназначенных для того, чтобы быть корневыми классами, предупреждение можно подавить, пометив их интерфейсы с __attribute__((objc_root_class)).

-Wselector (Objective-C and Objective-C++ only)

Предупреждать, если при компиляции обнаружено несколько методов разных типов для одного селектора. Проверка выполняется по списку методов на заключительной стадии компиляции. Кроме того, проверяется каждый селектор, появляющийся в @selector(…) выражении, и найден ли соответствующий метод для этого селектора во время компиляции. Поскольку эти проверки сканируют таблицу методов только в конце компиляции, эти предупреждения не генерируются, если заключительная стадия компиляции не достигнута, например, из-за ошибки во время компиляции или из-за использования опции -fsyntax-only.

-Wstrict-selector-match (Objective-C and Objective-C++ only)

Предупреждать, если обнаружено несколько методов с различными типами аргументов и/или возвращаемых значений для заданного селектора при попытке отправить сообщение с использованием этого селектора получателю типа id или Class. Когда этот флаг выключен (что является по умолчанию), компилятор опускает такие предупреждения, если все обнаруженные различия ограничены типами, которые имеют одинаковый размер и выравнивание.

-Wundeclared-selector (Objective-C and Objective-C++ only)

Предупреждать, если найдено выражение @selector(…) с ссылкой на необъявленный селектор. Селектор считается необъявленным, если метод с таким именем не был объявлен до выражения @selector(…), ни явно в объявлении @interface или @protocol, ни неявно в разделе @implementation. Эта опция всегда выполняет свои проверки, как только обнаруживает выражение @selector(…), в то время как -Wselector выполняет свои проверки только на заключительной стадии компиляции. Это также обеспечивает соблюдение соглашения по стилю программирования, что методы и селекторы должны быть объявлены до использования.

-print-objc-runtime-info

Сгенерировать заголовок C, описывающий самую большую структуру, передаваемую по значению, если таковая имеется.

Next: Опции форматирования сообщений об ошибках, Previous: Опции диалекта C++, Up: Вызов GCC [Содержание][Индекс]

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

Spec-Zone.ru

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