zoukankan      html  css  js  c++  java
  • C/C++的Name Mangling

    C语言

    函数

    1、void __CALLTYPE f();
    2、int __CALLTYPE f();
    3、int __CALLTYPE f(int);
    4、double __CALLTYPE f(int, double);
    5、int* __CALLTYPE f(int*, char*);

    __cdecl

    1、_f
    2、_f
    3、_f
    4、_f
    5、_f
    仅仅在函数名前加一个下划线,至于函数返回值、参数,完全没有处理

    __stdcall

    1、_f@0
    2、_f@0
    3、_f@4
    4、_f@12
    5、_f@8
    在函数名前加一个下划线,然后紧跟“@”符号,最后是函数参数大小总和(注意:此总和包含了字节填充)

    __fastcall

    1、@f@0
    2、@f@0
    3、@f@4
    4、@f@12
    5、@f@8
    跟 __stdcall 唯一不同的是,函数前面的下划线变为了“@”符号

    C++语言

    函数

    1、void __CALLTYPE f();
    2、int __CALLTYPE f();
    3、int __CALLTYPE f(int);
    4、double __CALLTYPE f(int, double);
    5、int* __CALLTYPE f(int*, char*);

    __cdecl

    1、?f@@YAXXZ
    2、?f@@YAHXZ
    3、?f@@YAHH@Z
    4、?f@@YANHN@Z
    5、?f@@YAPAHPAHPAD@Z
    6、?f@ABCD@@QAAHXZ
    7、??$f@H@@YAHH@Z

    规则 “?”表示一个函数的开始,用以区别于 C 语言的“_”,f 为函数名称,“@@YA”表示函数调用约定为 __cdecl,最后末位的两位:X表示函数没有参数, 也就是void, Z是结束标识. 如果函数参数不为空时, 会以@Z结束。

     

  • 相关阅读:
    python编码问题和py2和py3的不同
    day27
    多继承补充
    zoj3820 Building Fire Stations 树的中心
    DLX舞蹈链 hdu5046
    时间复杂度
    线性求中位数 poj2388
    codeforce447 D SGU 548 贪心+优先队列
    hdu4864 hdu4268 贪心 lower_bound
    zoj3672 Gao The Sequence
  • 原文地址:https://www.cnblogs.com/tinaluo/p/5357681.html
Copyright © 2011-2022 走看看