Spec-Zone.ru › GCC 11

Далее: Параметры форматирования диагностических сообщений, Предыдущее: Параметры, управляющие диалектом C++, Вверх: Параметры командной строки GCC [Содержание][Индекс]

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 (см. ниже). Опция -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 это достигается с помощью страницы обмена.

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

Далее: Параметры форматирования диагностических сообщений, Предыдущий: Параметры, управляющие диалектом C++, Вверх: Опции командной строки GCC [Оглавление][Индекс]

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

Spec-Zone.ru

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