函数的调用约定——__thiscall,__cdecl,__stdcall

转自:http://c.chinaitlab.com/skill/844547.html


    通常在使用VC进行函数定义时会指定该函数调用方式,诸如:
    int __stdcall max(int a, int b)
    {
    return a>b?a:b;
    }
    int __cdecl min(int a, int b)
    {
    return a<b?a:b;
    }
    bool __fastcall equal(int a, int b)
    {
    return a=b?true:false;
    }
    首先,让我们来分个类,调用方法分为两大类另加一个较特殊的__thiscall.
    第一类:__stdcall类  别名:WINAPI,CALLBACK,PASCAL。该类特点是:主调函数负责参数入栈,由函数本身负责栈的恢复。
    第二类:__cdecl类    别名:C/C++中默认调用方式,若你定义函数未指定函数调用约定(Calling Conventions),例如在VC6中下面两个函数的调用约定是等价的:
    int max(int a, int b)
    {
    return a>b?a:b;
    }
    int __cdecl min(int a, int b)
    {
    return a<b?a:b;
    }
    该类调用约定的特点是:由主调函数负责参数入栈,并由主调函数负责线的恢复。
    第三类:__thiscall 该类比较特殊,只用于类成员函数调用,你甚至不能强制指定这个函数调用约定。它是由C/C++编译器自动添加的。在C/C++中类成员函数会默认传入一个this指针,对于此,在默入情况下,C/C++中类成员函数通过此类调用约定来指定this指针。
    接着介绍一下__thiscall,__thiscall是关于类的一种调用方式。
    它与其他调用方式的最大区别是:
    __thiscall对每个函数都增加了一个类指针参数
    class   aa
    {
    void   bb(int   cc);
    };
    实际上bb的函数原形是void   bb(aa   &this,   int   cc);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值