Spec-Zone.ru › GCC 14

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

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

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

GCC предоставляет два разных способа указания атрибутов: традиционную GNU синтаксическую конструкцию с использованием аннотаций ‘__attribute__ ((...))’ и более новый стандартный C и C++ синтаксис с использованием ‘[[...]]’ с префиксом ‘gnu::’ для имён атрибутов. Обратите внимание, что точные правила размещения атрибутов в вашем исходном коде отличаются в зависимости от используемого синтаксиса. Подробнее см. Синтаксис атрибутов.

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

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

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

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

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

  • Общие атрибуты функций
  • Атрибуты функций AArch64
  • Атрибуты функций AMD GCN
  • Атрибуты функций ARC
  • Атрибуты функций ARM
  • Атрибуты функций AVR
  • Атрибуты функций Blackfin
  • Атрибуты функций BPF
  • Атрибуты функций C-SKY
  • Атрибуты функций Epiphany
  • Атрибуты функций H8/300
  • Атрибуты функций IA-64
  • Атрибуты функций M32C
  • Атрибуты функций M32R/D
  • Атрибуты функций m68k
  • Атрибуты функций MCORE
  • Атрибуты функций 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-14.2.0/gcc/Function-Attributes.html

Spec-Zone.ru

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