6.33 Объявление атрибутов функций ¶
В GNU C и C++ вы можете использовать атрибуты функций для указания определённых свойств функций, которые могут помочь компилятору оптимизировать вызовы или более тщательно проверять код на правильность. Например, вы можете использовать атрибуты для указания того, что функция никогда не возвращает (noreturn), возвращает значение, зависящее только от значений её аргументов (const), или имеет аргументы типа printf (format).
Вы также можете использовать атрибуты для управления размещением памяти, параметрами генерации кода или соглашениями о вызове/возвращении в аннотируемой функции. Многие из этих атрибутов зависят от целевой платформы. Например, многие платформы поддерживают атрибуты для определения функций обработчиков прерываний, которые обычно должны следовать особым соглашениям об использовании регистров и возвращении. Такие атрибуты описаны в подраздёле для каждой платформы. Однако значительное количество атрибутов поддерживается большинством, если не всеми платформами. Эти атрибуты описаны в разделе Общие атрибуты функций.
Атрибуты функций вводятся ключевым словом __attribute__ в объявлении функции, за которым следует спецификация атрибута, заключенная в двойные скобки. Вы можете указать несколько атрибутов в объявлении, разделив их запятыми внутри двойных скобок или сразу после одной спецификации атрибута указать другую. Смотрите Синтаксис атрибутов, чтобы узнать точные правила синтаксиса и размещения атрибутов. Совместимые спецификации атрибутов в различных объявлениях одной и той же функции объединяются. Спецификация атрибута, которая несовместима с атрибутами, уже применёнными к объявлению одной и той же функции, игнорируется с предупреждением.
Некоторые атрибуты функций принимают один или несколько аргументов, которые ссылаются на параметры функции по их позициям в списке параметров функции. Такие аргументы атрибутов называются позиционными аргументами. Если не указано иное, позиционные аргументы, которые указывают свойства параметров типа указатель, также могут указывать те же свойства нестатического члена функции в C++, а также параметров типа ссылка на указатель. Для обычных функций позиция один относится к первому параметру в списке. В нестатических членах функций C++ позиция один относится к неявному this указателю. Те же ограничения и эффекты применяются к атрибутам функций, используемым с обычными функциями или членами функций C++.
GCC также поддерживает атрибуты в объявлениях переменных (см. Указание атрибутов переменных), меток (см. Атрибуты меток), перечислителей (см. Атрибуты перечислителей), операторов (см. Атрибуты операторов) и типов (см. Указание атрибутов типов).
Существует некоторое пересечение между целями атрибутов и псевдокоманд (см. Псевдокоманды, принимаемые 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
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/gcc/Function-Attributes.html