Detailed Description
Макросы для упрощения доступа к GCC-атрибутам для функций и переменных, которые могут быть применены к прототипам функции или атрибутам переменной.
Define Documentation
#define ATTR_ALIAS |
( |
|
Func | ) |
__attribute__ ((alias( #Func ))) |
Помечает функцию как ссылку (алиас, псевдоним) на другую функцию.
- Parameters:
-
[in] | Func | имя функции, у которой появится новый псевдоним в качестве заданного имени. |
#define ATTR_ALWAYS_INLINE __attribute__ ((always_inline)) |
Принуждает компилятор встроить код функции вместо её вызова. Когда атрибут применен, то в любом случае тело функции будет встроено в код без генерации вызова.
#define ATTR_CONST __attribute__ ((const)) |
Показывает, что указанная функция является константой, т. е. не производит никаких побочных действий (side effects), за исключением доступа к переменным параметров.
#define ATTR_DEPRECATED __attribute__ ((deprecated)) |
Помечает указанную функцию как устаревшую, в результате любой её вызов будет сопровождаться проедупреждением компилятора.
#define ATTR_INIT_SECTION |
( |
|
SectionIndex | ) |
__attribute__ ((naked, section (".init" #SectionIndex ))) |
Размещает код функции в одной из секций инициализации, которая выполняется перед запуском главной функции (main) приложения. Обратитесь к руководству avr-libc для подробностей по секциям инициализации.
- Parameters:
-
[in] | SectionIndex | номер секции инициализации, где должна быть размещена функция |
#define ATTR_NAKED __attribute__ ((naked)) |
Удаляет из функции любую преамбулу или постамбулу. Когда атрибут применен, то функция не будет иметь какого-либо кода для сохранения регистров или стека. Должно использоваться с предосторожностями, и в этом случае программист сам отвечает за целостность стека и работу регистров.
#define ATTR_NO_INIT __attribute__ ((section (".noinit"))) |
Принуждает компилятор не обнулять автоматически при старте программы указанную глобальную переменную. В этом случае текущее содержимое RAM, соответствующее этой переменной, будет сохранено. В большинстве случаев эначения в RAM будут случайны, так как при выключении питания volatile-память не сохраняет свое состояние, но это может использоваться в некоторых специальных случаях, например при передаче переменных обратно в программу при сбросе системы по сторожевому таймеру (watchdog reset).
#define ATTR_NO_INLINE __attribute__ ((noinline)) |
Защищает компилятор от встраивания (inlining) указанной функции. Когда атрибут применен, то вызов функции ни при каких обстоятельствах не будет заменен встраиванием кода.
#define ATTR_NO_RETURN __attribute__ ((noreturn)) |
Показывает компилятору, что из функции не будет никогда произведен возврат, в результате чего в результирующем коде могут быть опущены восстановление стека или процедуры возврата.
#define ATTR_NON_NULL_PTR_ARG |
( |
|
... | ) |
__attribute__ ((nonnull (__VA_ARGS__))) |
Показывает, что указанные параметры функции являются указателями, которые никогда не должны быть равны NULL. Когда атрибут прикладывается как разделенный запятыми единично-базовый (1-based) список, то компилятор будет выдавать предупреждение, если при компиляции будет известно, что в точке вызова функции параметр равен NULL.
#define ATTR_PURE __attribute__ ((pure)) |
Показывает, что указанная функция чиста, т. е. не производит побочных действий (side-effects), за исключением доступа к глобальным переменным или переменным параметров.
#define ATTR_WARN_UNUSED_RESULT __attribute__ ((warn_unused_result)) |
Показывает, что функция возвращает значение, которое должно игнорироваться кодом пользователя. Когда атрибут применен, то любой возврат из функции с игнорированием результата будет генерировать предупреждение компилятора.
#define ATTR_WEAK __attribute__ ((weak)) |
Помечает указанную функцию как слабую, которая может быть отменена любыми другими функциями с идентичным именем (в этом случае "слабая" функция будет отброшена при линковке).