在gcc中,所有函数调用默认都是cdecl方式调用,但是vc中,静态函数是cdecl调用,成员函数是thiscall方式调用的,虽然可以强制指定某个函数使用cdecl,但是如何禁用thiscall,全部使用cdecl呢?
class A
{
    int __cdecl test(); // 强制使用cdecl方式
    int test1(); // 默认是thiscall
};
如何禁用thiscall,全部使用cdecl呢?

解决方案 »

  1.   

    我在想你用 cdecl 咋传 this 过去啊?
      

  2.   

    请参见gcc的成员函数调用过程
      

  3.   

    http://topic.csdn.net/t/20030721/20/2055083.html
    看下这个 我觉得没必要禁用thiscall吧 它就是干这个用的
    gcc的类成员 不是这么设计的?
      

  4.   

    特殊需求,需要把所有函数都声明称cdecl调用,每个函数都加很麻烦,所以问问有没有可以禁用vc中thiscall的办法
      

  5.   

    没有找到强制为cdecl的编译选项,C++成员函数会默认使用thiscall,只能自己加上。
      

  6.   

    第三类:__thiscall 该类比较特殊,只用于类成员函数调用,你甚至不能强制指定这个函数调用约定。它是由C/C++编译器自动添加的。在C/C++中类成员函数会默认传入一个this指针,对于此,在默入情况下,C/C++中类成员函数通过此类调用约定来指定this指针. 按这个说法的话,所有的c/c++编译器都是这么设计的吧 GCC没用过
    用过的 指点一下 有啥区别
      

  7.   

    编译的Command Line选项有办法加参数禁用thiscall吗?我对这个不太懂~~
      

  8.   

    cdecl方式的,this指针是通过堆栈传递的
    thiscall的this指针则是用ecx传递的
    gcc全都是用cdecl,vc默认使用thiscall
      

  9.   


    最后一个压入栈中,thiscall通过ECX传递。
      

  10.   

    或者你还是使用gcc去编译咯。
      

  11.   

    C++的成员函数调用类型都是_thiscall,它会在编译的时候在最右边多加一个this(自身指针)这个参数,这也就是你可以类成员中使用它的原因.
    如果你需要其他的调用约定,如_cdecl,可以将成员函数声明为静态的,如 static void _cdecl fun();
    不加static的话,_cdecl会被忽略.