Функции Naked
Блок, относящийся только к системам Microsoft
Атрибут класса хранения naked является расширением языка C для систем Microsoft. Код функций, объявленных с атрибутом naked, создается компилятором без кода пролога и эпилога. Эту возможность можно использовать, чтобы создавать свой собственный код на языке ассемблера и вставлять его в качестве пролога и эпилога. Функции с атрибутом naked особенно полезны для написания драйверов виртуальных устройств.
Поскольку атрибут naked относится только к определению функции и не является модификатором типа, то в функциях с этим атрибутом используется расширенный синтаксис атрибутов, который описывается в разделе Расширенные атрибуты классов хранения.
В следующем примере определяется функция с атрибутом naked.
__declspec( naked ) int func( formal_parameters )
{
/* Function body */
}
Другой пример:
#define Naked __declspec( naked )
Naked int func( formal_parameters )
{
/* Function body */
}
Атрибут naked влияет только на создание кода компилятора для последовательностей пролога и эпилога функции. Код, который создается для вызова таких функций, не зависит от этого атрибута. Таким образом, атрибут naked не входит в тип функции, а указатели на функции не могут иметь атрибут naked. Кроме того, атрибут naked не может применяться к определениям данных. Например, следующий код вызывает ошибки:
__declspec( naked ) int i; /* Error--naked attribute not */
/* permitted on data declarations. */
Атрибут naked относится только к определению функции и не может быть определен в прототипе функции. Следующее объявление создает ошибку компилятора:
__declspec( naked ) int func(); /* Error--naked attribute not */
/* permitted on function declarations. */ \
Завершение блока, относящегося только к системам Microsoft