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