您的位置:首页 > 编程语言 > C语言/C++

C和C++编译器的函数名修饰规则

2016-05-26 15:17 330 查看
 C编译器的函数名修饰规则 :

    对于__stdcall调用约定,编译器和链接器会在输出函数名前加上一个下划线前缀,函数名后面加上一个“@”符号和其参数的字节数

          例如_functionname@number。

    __cdecl调用约定仅在输出函数名前加上一个下划线前缀

          例如_functionname。

   __fastcall调用约定在输出函数名前加上一个“@”符号,后面也是一个“@”符号和其参数的字节数

         例如@functionname@number 

C++编译时函数名修饰约定规则: 

 

      __stdcall调用约定:   

  1、以"?"标识函数名的开始,后跟函数名;   

  2、函数名后面以"@@YG"标识参数表的开始,后跟参数表;   

  3、参数表以代号表示:   

  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"代替,一个"0"代表一次重复;   

  4、参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;     

  5、参数表后以"@Z"标识整个名字的结束,如果该函数无参数,则以"Z"标识结束。   

  其格式为"?functionname@@YG*****@Z"或"?functionname@@YG*XZ",例如   

                      int   Test1(char   *var1,unsigned   long)-----“?Test1@@YGHPADK@Z”   

                      void   Test2()                           -----“?Test2@@YGXXZ”   

    

  __cdecl调用约定:   

  规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的"@@YG"变为"@@YA"。  

 

  __fastcall调用约定:   

  规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的"@@YG"变为"@@YI"。

转自:http://blog.csdn.net/H2SO2H2SO2/article/details/4207127
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: