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