Spec-Zone.ru › GCC 10

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

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

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

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

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

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

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

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

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

Spec-Zone.ru

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