naked (C++)

Microsoft 专用

对于使用 naked 特性声明的函数,编译器生成不带 prolog 和 epilog 代码的代码。 利用此功能,可以使用内联汇编程序代码编写您自己的 prolog/epilog 代码序列。 裸函数对于编写虚拟设备驱动程序特别有用。 请注意,naked 特性仅在 x86 和 ARM 上有效,且不可用于 x64 上。

语法

__declspec(naked) declarator

备注

由于 naked 特性仅与函数定义相关且不是类型修饰符,因此 naked 函数使用扩展的特性语法和 __declspec 关键词。

即使函数也标有 __forceinline 关键字,编译器也不能为用裸属性标记的函数生成内联函数。

如果 naked 属性应用于非成员方法的定义以外的任何内容,则编译器会发出错误。

示例

此代码使用 naked 属性定义函数:

__declspec( naked ) int func( formal_parameters ) {}

或者:

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

naked 特性仅影响函数的 prolog 和 epilog 序列的编译器代码生成的性质。 它不影响为调用这些函数而生成的代码。 因此,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
关键字
Naked 函数调用