__fastcall
Microsoft 专用
调用约定 __fastcall 指定函数的参数将在注册,如果可能,。 下面的列表显示此调用约定的实现。
元素 |
实现 |
---|---|
参数在订单 |
前两个 DWORD 或较小的实参 ECX 和 EDX 传入寄存器;其他参数从右向左传递。 |
堆栈维护职责 |
调用函数将从堆栈的参数。 |
名称修饰约定 |
at 符号 (@) 前缀的名称;在符号的后面 (十进制) 在参数列表作为后缀。名称。 |
大小写转换约定 |
不执行的大小写转换。 |
备注
将来的编译器版本可能使用不同的注册存储参数。
使用 /Gr 编译器选项在模块引起每个函数编译为 fastcall,除非该函数。一冲突的属性,或函数的名称为 main。
在 Itanium 处理器 (IPF)系列 (ipf) 和 AMD64 计算机上, __fastcall 由编译器接受并忽略;在 IPF 芯片上,按照约定,参数将传入寄存器。
对非静态类函数,因此,如果函数是定义的未包含联的,调用约定修饰符在该未包含联定义的不必指定。 即类非静态成员方法,在声明中指定的调用约定在定义假定。 将此类定义,
struct CMyClass {
void __fastcall mymethod();
};
this
void CMyClass::mymethod() { return; }
与此等效
void __fastcall CMyClass::mymethod() { return; }
示例
在下面的示例中,名为 DeleteAggrWrapper 的函数通过在注册的参数:
// Example of the __fastcall keyword
#define FASTCALL __fastcall
void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);