__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, ...);

请参见

参考

参数传递的和命名约定

C++关键字