naked (C++)

Блок, относящийся только к системам Майкрософт

Для функций, объявленных атрибутом, компилятор создает код без пролога naked и кода эпилога. Эту возможность можно использовать, чтобы создавать свой собственный код на языке ассемблера и вставлять его в качестве пролога и эпилога. Функции с атрибутом naked особенно полезны для написания драйверов виртуальных устройств. Обратите внимание, что naked атрибут действителен только в x86 и ARM и недоступен в x64.

Синтаксис

__declspec(naked) declarator

Замечания

naked Поскольку атрибут относится только к определению функции и не является модификатором типа, голые функции должны использовать расширенный синтаксис атрибутов и __declspec ключевое слово.

Компилятор не может создать встроенную функцию для функции, помеченной голым атрибутом, даже если функция также помечена __forceinline ключевое слово.

Компилятор выдает ошибку, если naked атрибут применяется ко всему, кроме определения метода, отличного от определения метода, не являющегося членом.

Примеры

Этот код определяет функцию с атрибутом naked :

__declspec( naked ) int func( formal_parameters ) {}

Другой пример.

#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}

Атрибут 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

Завершение блока, относящегося только к системам Майкрософт

См. также

__declspec
Ключевые слова
Вызовы функций с атрибутом naked