Naked 函数
Microsoft 专用
naked
存储类特性是特定于 Microsoft 的 C 语言扩展。 对于使用 naked
存储类特性声明的函数,编译器生成不带 prolog 和 epilog 代码的代码。 利用此功能,可以使用内联汇编程序代码编写您自己的 prolog/epilog 代码序列。 裸函数对于编写虚拟设备驱动程序特别有用。
由于 naked
特性仅与函数定义相关且不是类型修饰符,因此 naked 函数使用扩展的特性语法,如扩展的存储类特性中所述。
下面的示例利用 naked
特性定义了一个函数:
__declspec( naked ) int func( formal_parameters )
{
/* Function body */
}
或者:
#define Naked __declspec( naked )
Naked int func( formal_parameters )
{
/* Function body */
}
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 专用