为什么 gcc 忽略 __attribute__((stdcall))?

Ren*_*ger 7 c gcc calling-convention

当我使用版本 8.1.1 编译以下 C 源代码时gcc,我得到一个warning: \xe2\x80\x98stdcall\xe2\x80\x99 attribute ignored [-Wattributes].

\n\n

为什么 gcc 选择忽略这个属性,我该怎么做才能让它接受它?

\n\n
__attribute__((stdcall)) int S(int a) {\n    return a * (a+1);\n}\n\nint main() {\n    return S(6);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

mel*_*ene 7

gcc 文档说:

stdcall

在 x86-32 目标上,该stdcall属性使编译器假定被调用函数从用于传递参数的堆栈空间中弹出,除非它采用可变数量的参数。

(强调我的。)

所以如果你不是针对32位机器编译的,stdcall是无法使用的。

  • 感谢您帮我解决了这个问题。我完全没有意识到 32 位和 64 位 x86 之间关于调用约定的转变。 (2认同)