Невозможно понять следующее объявление функции

Кто-нибудь может объяснить следующее объявление функции.

inline uint64_t MY_FUNC(unsigned long param) __attribute__ ((pure, always_inline)); 

2 ответа

Решение

always_inline а также pure являются gcc атрибуты функции. Из документации gcc:

always_inline

Как правило, функции не являются встроенными, если не указана оптимизация. Для функций, объявленных как встроенные, этот атрибут указывает на функцию, независимую от любых ограничений, которые в противном случае применяются к встраиванию. Неспособность встроить такую ​​функцию диагностируется как ошибка. Обратите внимание, что если такая функция вызывается косвенно, компилятор может или не может встроить ее в зависимости от уровня оптимизации, и невозможность встроить косвенный вызов может или не может быть диагностирована.

Ваш MY_FUNC функция уже имеет inline спецификатор функции, но в C inline Это всего лишь предложение встроить, и компилятор не обязан встроить функцию.

чистый

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

inline uint64_t MY_FUNC(unsigned long param) __attribute__ ((pure, always_inline)); 
  • inline - функция объявлена ​​как встроенная, либо как подсказка по оптимизации, либо для целей связывания.
  • uint64_t - тип возвращаемой фиксированной ширины. Ссылаться на <stdint.h>,
  • MY_FUNC - имя функции
  • unsigned long - тип параметра
  • param - название параметра
  • __attribute__ ((pure, always_inline)) - Специфичные для компилятора GCC атрибуты. Посмотри, кто ниндзя их описание.

Голосование закрывать как "слишком широкое".

Другие вопросы по тегам