【发布时间】:2021-09-20 10:28:01
【问题描述】:
int __cdecl funcB(int a, int b) {
return 0;
}
int __stdcall funcA(int a, int b) {
return funcA(a, b);
}
我编写了这两个函数,它们有不同的调用约定:__stdcall 和 __cdecl。
我的问题是为什么 MSVC 没有抛出编译错误?
因为在我看来,两个调用约定不同的函数不能互相调用
如果调用者认为被调用者应该清理堆栈,而被调用者认为调用者应该清理堆栈,那就是我的问题
任何答案都会有所帮助
【问题讨论】:
-
你的观点是基于什么?为什么会出现错误?
-
我看没问题,编译器拥有做正确事情所需的所有信息。并不是您将 funcB 称为 __stdcall。
-
@463035818_is_not_a_number 如果调用者认为被调用者应该清理堆栈,而被调用者认为调用者应该清理堆栈,那就是我的问题
-
我认为你在重新输入时破坏了你的例子。
-
@Suric 函数什么都没想;创建调用的是编译器,它(显然)知道如何处理每个约定。
标签: c++ calling-convention function-call