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
Завершение блока, относящегося только к системам Майкрософт
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по