Spec-Zone.ru › GCC 12

6.33 Объявление атрибутов функций

В GNU C и C++ вы можете использовать атрибуты функций для указания определенных свойств функций, которые могут помочь компилятору оптимизировать вызовы или более тщательно проверять код на корректность. Например, вы можете использовать атрибуты для указания, что функция никогда не возвращает (noreturn), возвращает значение, зависящее только от значений ее аргументов (const), или имеет printf-стиле аргументы (format).

Вы также можете использовать атрибуты для управления размещением памяти, опциями генерации кода или соглашениями вызова/возврата внутри функции, к которой применен атрибут. Многие из этих атрибутов зависят от целевой платформы. Например, многие целевые платформы поддерживают атрибуты для определения функций обработчиков прерываний, которые, как правило, должны следовать специальным соглашениям использования регистров и возврата. Такие атрибуты описаны в подразделе для каждой целевой платформы. Однако значительное количество атрибутов поддерживается большинством, если не всеми целевыми платформами. Они описаны в разделе Общие атрибуты функций.

Атрибуты функций вводятся ключевым словом __attribute__ в объявлении функции, за которым следует спецификация атрибута в двойных скобках. Вы можете указать несколько атрибутов в объявлении, разделяя их запятыми внутри двойных скобок или сразу после одной спецификации атрибута. Смотрите Синтаксис атрибутов для точных правил синтаксиса и размещения атрибутов. Совместимые спецификации атрибутов в различных объявлениях одной и той же функции объединяются. Спецификация атрибута, несовместимая с атрибутами, уже примененными к объявлению той же функции, игнорируется с предупреждением.

Некоторые атрибуты функций принимают один или несколько аргументов, которые ссылаются на параметры функции по их позициям в списке параметров функции. Такие аргументы атрибутов называются позиционными аргументами. Если не указано иное, позиционные аргументы, указывающие свойства параметров с типом указателя, также могут указывать те же свойства неявного C++ this аргумента в нестатических членах функций и параметров типа ссылки на указатель. Для обычных функций позиция один относится к первому параметру в списке. В нестатических членах функций C++ позиция один относится к неявному this указателю. Те же ограничения и эффекты применяются к атрибутам функций, используемым с обычными функциями или функциями-членами C++.

GCC также поддерживает атрибуты в объявлениях переменных (см. Атрибуты переменных), метках (см. Атрибуты меток), перечислителей (см. Атрибуты перечислителей), операторов (см. Атрибуты операторов), типов (см. Атрибуты типов) и в объявлениях полей (для tainted_args).

Существует некоторое перекрытие между целями атрибутов и псевдодиректив (см. Псевдодирективы, принимаемые GCC). Было удобно использовать __attribute__ для естественного прикрепления атрибутов к соответствующим объявлениям, в то время как #pragma используется для совместимости с другими компиляторами или конструкциями, которые не естественным образом входят в грамматику.

В дополнение к документированным здесь атрибутам, плагины GCC могут предоставлять свои собственные атрибуты.

• Общие атрибуты функций:
• Атрибуты функций AArch64:
• Атрибуты функций AMD GCN:
• Атрибуты функций ARC:
• Атрибуты функций ARM:
• Атрибуты функций AVR:
• Атрибуты функций Blackfin:
• Атрибуты функций BPF:
• Атрибуты функций CR16:
• Атрибуты функций C-SKY:
• Атрибуты функций Epiphany:
• Атрибуты функций H8/300:
• Атрибуты функций IA-64:
• Атрибуты функций M32C:
• Атрибуты функций M32R/D:
• Атрибуты функций m68k:
• Атрибуты функций MCORE:
• Атрибуты функций MeP:
• Атрибуты функций MicroBlaze:
• Атрибуты функций Microsoft Windows:
• Атрибуты функций MIPS:
• Атрибуты функций MSP430:
• Атрибуты функций NDS32:
• Атрибуты функций Nios II:
• Атрибуты функций Nvidia PTX:
• Атрибуты функций PowerPC:
• Атрибуты функций RISC-V:
• Атрибуты функций RL78:
• Атрибуты функций RX:
• Атрибуты функций S/390:
• Атрибуты функций SH:
• Атрибуты функций Symbian OS:
• Атрибуты функций V850:
• Атрибуты функций Visium:
• Атрибуты функций x86:
• Атрибуты функций Xstormy16:

Далее: Атрибуты переменных, Предыдущее: Смешанные метки и объявления, Вверх: Расширения C [Содержание][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Function-Attributes.html

Spec-Zone.ru

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