int _cdecl f (int x) { return 0; }
int _stdcall f (int y) { return 0; }
名称修改后将是:
_f
_f@4
哪个不冲突,这在 c 中是否允许,如果不允许,为什么?
int _cdecl f (int x) { return 0; }
int _stdcall f (int y) { return 0; }
名称修改后将是:
_f
_f@4
哪个不冲突,这在 c 中是否允许,如果不允许,为什么?
关键字_cdecl
and_stdcall
不是 C 语言的一部分。这些是 Microsoft 扩展,之前有类似的 Borland 扩展。
在标准 C 语言中,您不能声明调用约定。显然,声明的每个函数都等同于 MS 编译器所指的“ _cdecl
”约定。
当您调用它们时,可以使用内联汇编来区分这两个函数。因为您使用的是特定于平台的 C 供应商扩展,所以您可能会考虑使用内联汇编。
首先,那不是弄脏,那是装饰。重载是 C++ 编译器会发生的事情,因为 C++ 最初旨在支持使用 C 样式链接工具进行重载。
至于你的问题,你不能有两个同名的函数。为了应用该规则,使用未修饰的名称。
为什么会这样?我想这是因为装饰和调用约定不是 C 标准的一部分,并且特定于每个编译器。我很确定支持多种调用约定的 C 编译器只是在 C 发明之后的几年才出现。