我遇到了MSVC和ICC的问题:
我需要使用带有stdcall调用约定的varadic参数,但编译器会忽略它的varadic函数并破坏堆栈。
解决这个问题的简单方法是将参数的数量作为参数之一,并在它被损坏之前抵消ESP
,但在这种情况下,我不需要这个数字对于函数上下文的args,如果可能的话,宁可避免使用它。
有人知道是否有办法吗?
答案 0 :(得分:1)
被调用者清理堆栈,因此编译器生成vararg函数
__cdecl
。
鉴于此,我不确定您的预期如何进行。如果stdcall
要求被调用者清理堆栈,但是在vararg函数中,被调用者无法在编译时知道堆栈上的内容,它将如何工作?您是否希望stdarg
va_list
宏操纵调用框架?我并不认为微软是如何看待它的,所以你所要求的东西似乎不可能,至少不是通过使用微软编译器编写C语言。