gpt4 book ai didi

c++ - 将 va_arg 传递给函数两次会得到相同的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:09 24 4
gpt4 key购买 nike

我正在尝试使用 va_arg 在我的 GUI 库中创建一个通用工厂函数。当在同一函数中两次传递 va_arg 时,它们传递相同的值而不是两个不同的值:

GUIObject* factory(enumGUIType type, GUIObject* parent, ...){
va_list vl;
va_start(vl, parent);
...
label->SetPosition(va_arg(vl, int), va_arg(vl, int));
va_end(vl);
return finalObjectPointer;
}

factory(LABEL, theParent, 100,200); // Results in position 200:200

是什么导致了这种意外行为?

最佳答案

编译器不保证按顺序评估参数。添加一些额外的局部变量并按顺序执行这两个赋值。

参见 this其他堆栈溢出发布。

int v1 = va_arg(vl, int);
int v2 = va_arg(vl, int);

label->SetPosition(v1, v2);

要获得您正在观察的结果:两次完全相同的值——可能需要在未定义的评估顺序之上堆积编译器错误,或者您环境中 va_arg 的特定宏扩展的一些有趣方面。

关于c++ - 将 va_arg 传递给函数两次会得到相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1967659/

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