Невозможно понять следующее объявление функции
Кто-нибудь может объяснить следующее объявление функции.
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 атрибуты. Посмотри, кто ниндзя их описание.
Голосование закрывать как "слишком широкое".