Поделиться через


naked (C++)

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

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

__declspec(naked) declarator

Заметки

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

Компилятор не может создать подставляемую функцию для функции, помеченной атрибутом naked, даже если она помечена также ключевым словом __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

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

См. также

Ссылки

__declspec

Ключевые слова в C++

Вызовы функций Naked