Spec-Zone.ru › GCC 15

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 в качестве имени класса, экземпляр которого создается для каждой строковой константы, заданной с помощью синтаксиса @"…". Если используется GNU runtime, имя класса по умолчанию — NXConstantString, а если используется NeXT runtime — NSConstantString (см. ниже). На платформах Darwin / macOS параметр -fconstant-cfstrings, если он также указан, переопределяет значение -fconstant-string-class и приводит к тому, что константы @"…" представляются в виде строковых констант CoreFoundation. Обратите внимание, что -fconstant-cfstrings — это псевдоним соответствующего параметра целевой платформы -mconstant-cfstrings.

-fgnu-runtime

Создавать объектный код, совместимый со стандартной GNU runtime Objective-C. Для большинства типов систем этот параметр используется по умолчанию.

-fnext-runtime

Создавать вывод, совместимый с NeXT runtime. Этот параметр используется по умолчанию для систем на базе NeXT, включая Darwin / macOS. Макрос __NEXT_RUNTIME__ предварительно определяется тогда и только тогда, когда используется этот параметр.

-fno-nil-receivers

Предполагать, что все диспетчеризации сообщений Objective-C ([receiver message:arg]) в данной единице трансляции гарантируют, что получатель не является nil. Это позволяет использовать более эффективные точки входа в runtime. Этот параметр доступен только в сочетании с NeXT runtime и версией ABI 0 или 1.

-fobjc-abi-version=n

Использовать версию n ABI Objective-C для выбранной runtime. В настоящее время этот параметр поддерживается только для NeXT runtime. В этом случае версия 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, но не с унаследованными от суперклассов. Вызов всех таких методов в иерархии наследования объекта должен обеспечивать runtime Objective-C. Методы - (id) .cxx_construct вызываются runtime сразу после выделения памяти под новый экземпляр объекта; методы - (void) .cxx_destruct вызываются непосредственно перед освобождением runtime памяти экземпляра объекта.

На момент написания этого документа только NeXT runtime в 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 runtime, так и для NeXT runtime (но недоступен в сочетании с NeXT runtime в Mac OS X 10.2 и более ранних версиях).

-fobjc-gc

Включить сборку мусора (GC) в программах на Objective-C и Objective-C++. Этот параметр доступен только с NeXT runtime; GNU runtime использует другую реализацию сборки мусора, для которой не требуются специальные флаги компилятора.

-fobjc-nilcheck

Для NeXT runtime с версией 2 ABI проверять наличие nil-получателя при вызове метода до фактического вызова метода. Это поведение включено по умолчанию; его можно отключить с помощью -fno-objc-nilcheck. Проверка nil никогда не выполняется для методов класса и вызовов super, независимо от значения этого флага. В настоящее время этот флаг ничего не меняет при использовании GNU runtime или более ранней версии ABI NeXT runtime.

-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 runtime в Mac OS X 10.3 и более поздних версиях.

-fzero-link

При компиляции для NeXT runtime компилятор обычно заменяет вызовы objc_getClass("…") (если имя класса известно во время компиляции) статическими ссылками на класс, которые инициализируются при загрузке, что повышает производительность во время выполнения. Указание флага -fzero-link отключает это поведение и сохраняет вызовы objc_getClass("…"). Это полезно в режиме отладки Zero-Link, поскольку позволяет изменять реализации отдельных классов во время выполнения программы. GNU runtime в настоящее время всегда сохраняет вызовы 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 не задана семантика assign.

-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-15.3.0/gcc/Objective_002dC-and-Objective_002dC_002b_002b-Dialect-Options.html

Spec-Zone.ru

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