Spec-Zone.ru › GCC 15

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

В 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
  • Атрибуты функций LoongArch
  • Атрибуты функций M32C
  • Атрибуты функций M32R/D
  • Атрибуты функций m68k
  • Атрибуты функций MCORE
  • Атрибуты функций MicroBlaze
  • Атрибуты функций Microsoft Windows
  • Атрибуты функций MIPS
  • Атрибуты функций MSP430
  • Атрибуты функций NDS32
  • Атрибуты функций 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-15.3.0/gcc/Function-Attributes.html

Spec-Zone.ru

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