gpt4 book ai didi

c++ - 如何在编译器不破坏堆栈的情况下将可变参数与 __stdcall 一起使用

转载 作者:行者123 更新时间:2023-11-28 06:29:44 24 4
gpt4 key购买 nike

我遇到了 MSVC 和 ICC 的问题:

我需要使用具有 stdcall 调用约定的可变参数,但编译器会忽略可变参数并破坏堆栈。

解决这个问题的简单方法是将参数的数量作为参数之一并在它损坏之前偏移 ESP ,但在这种情况下我不需要参数的数量函数的上下文,所以如果可能的话宁愿避免它。

有人知道是否有办法做到这一点吗?

最佳答案

根据 documentation :

The callee cleans the stack, so the compiler makes vararg functions __cdecl.

鉴于此,我不确定您希望如何进行。如果 stdcall 要求被调用者清理堆栈,但在可变参数函数中,被调用者无法在编译时知道堆栈上有什么,它会如何工作?你会期望 stdarg va_list 宏来操纵调用帧吗?我不认为微软是这样看待它的,所以你所问的似乎是不可能的,至少不是通过使用微软编译器编写 C。

关于c++ - 如何在编译器不破坏堆栈的情况下将可变参数与 __stdcall 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832669/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com