【发布时间】:2015-01-08 03:56:45
【问题描述】:
我遇到了 MSVC 和 ICC 的问题:
我需要使用带有 stdcall 调用约定的可变参数,但编译器会忽略可变参数并破坏堆栈。
解决此问题的简单方法是将参数的数量作为参数之一并在其损坏之前偏移ESP,但在这种情况下,我不需要函数上下文的参数数量所以如果可能的话宁愿避免它。
有人知道有没有办法做到这一点?
【问题讨论】:
-
默认情况下不能。当使用
stdcall时,callee 负责清理堆栈。由于 被调用者 不知道参数的数量或参数占用了多少堆栈空间,因此如果不提供其他信息,它就无法在逻辑上清理堆栈。你试图做的不是一个好主意,任何让它发挥作用的尝试都可能比它值得付出更多的努力。这听起来像是一个 XY 问题,你真的应该重新考虑你想要完成的工作。 -
@CaptainObvlious 这不是传统的功能。真正最好的解决方案是做我所要求的(如果可能的话)。但是请看我对约翰回答的回应;它解释得更多。
标签: c++ c visual-c++ icc