C/C++中的函数调用约定

风行水上 @ 2010-11-01 21:19:37
标签:

    C/C++中有一些修饰关键字,用来指导编译器生成代码。

    这些修饰关键字会影响:

    • 参数传递顺序
    • 调用堆栈由谁(调用函数或被调用函数)清理
    修饰符 压栈顺序 清栈 C修饰名 C++修饰名
    __stdcall 从右到左 自己 _funcname@nbyes ?funcname@@YG参数表(@Z或XZ)
    __cdecl 从右到左 调用者 _funcname ?funcname@@YA参数表(@Z或XZ)
    __fastcall 从右到左 自己 @funcname@nbytes ?funcname@@YI参数表(@Z或XZ)
    thiscall 从右到左
    naked call

    参数表的格式如下:

    • X--void ,
    • D--char,
    • E--unsigned char,
    • F--short,
    • H--int,
    • I--unsigned int,
    • J--long,
    • K--unsigned long,
    • M--float,
    • N--double,
    • _N--bool,
    • ...
    • PA--表示指针,连续出现的指针可以用'0'代替。比如,char ** 可以表示为 PA0D
    • 参数表第一项是返回值的类型

    据说:

    • 在WIN32中,WINAPI 被定义为__stdcall

    关于dll的创建

    • __declspec(dllexport)
    • __declspec(dllimport)
    标签:

      分享到:
      comments powered by Disqus

      37/39ms