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 专用
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈