如何更改MinGW gcc中的默认调用约定

时间:2015-09-18 04:18:36

标签: mingw mingw32

在Microsoft Visual C ++中,可以使用/ Gz编译器选项将默认调用约定设置为stdcall。如何在MinGW g ++中做到这一点?

1 个答案:

答案 0 :(得分:2)

似乎是一个很好的方式来拍摄自己的脚;更好的是,IMO,将默认值明确地保留为__cdecl,并明确声明__stdcall函数,因此不存在混淆的可能性。但是,如果您决定这样做,一个好的起点就是阅读GCC在线文档;尝试谷歌搜索" gcc手册",这应该带你(e.g.) here

确保选择与您的GCC版本匹配的手册版本,然后参考"功能属性";这应该指向-mrtd选项作为您想要做的事情的可能候选人。在选项索引中查找,并按照引用查看:

  

-mrtd

     

使用不同的函数调用约定,其中包含函数   采用固定数量的参数返回ret值   指令,在返回时弹出他们的参数。这节省了   调用者中的一条指令,因为不需要弹出   争论那里。

     

您可以使用此调用序列指定使用函数属性“stdcall”调用单个函数。你也可以   使用函数属性“cdecl”覆盖-mrtd选项。看到   功能属性。

     

警告:此调用约定与Unix上通常使用的约定不兼容,因此如果需要调用则无法使用它   使用Unix编译器编译的库。

     

此外,您必须为所有带有可变数量参数的函数提供函数原型(包括printf);除此以外   为这些函数的调用生成了错误的代码。

     

此外,如果调用参数太多的函数,会导致严重错误的代码。 (通常,额外的论据是   无害地忽略了。)