naked (C++)
Microsoft 专用
对于使用 naked 特性声明的函数,编译器将生成编码,而无需 prolog 和 epilog 代码。 可以使用此功能来编写使用汇编程序代码的您自己的 prolog/epilog 代码顺序。 裸函数尤为用在编写虚拟设备驱动程序。请注意 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 特性仅影响函数 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 专用