Spec-Zone.ru › GCC 13

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

Использовать имя-класса в качестве имени класса для создания экземпляра для каждой литеральной строки, заданной синтаксисом @"…". По умолчанию имя класса — NXConstantString при использовании среды выполнения GNU, и NSConstantString при использовании среды выполнения NeXT (см. ниже). На платформах Darwin (macOS, MacOS X) опция -fconstant-cfstrings, если также присутствует, переопределяет настройку -fconstant-string-class и приводит к тому, что литералы @"…" будут выложены как постоянные строки CoreFoundation. Обратите внимание, что -fconstant-cfstrings является псевдонимом для соответствующей опции -mconstant-cfstrings для целевой платформы.

-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 вызываются непосредственно перед тем, как среда выполнения освобождает экземпляр объекта.

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

-fobjc-direct-dispatch

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

-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

Вывести объявления интерфейсов для всех классов, обнаруженных в исходном файле, в файл с именем имя-источника.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, описывающий самую большую структуру, передаваемую по значению, если такая структура существует.

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/Objective_002dC-and-Objective_002dC_002b_002b-Dialect-Options.html

Spec-Zone.ru

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