请看以下代码:
import core.vararg, std.stdio;
void main() {
foo(1);
}
void foo(...) {
va_list arguments;
for(int i; i<10; ++i) {
va_copy(arguments, _argptr);
writeln(arguments," ", va_arg!(int)(arguments));
}
}
输出:
7FFF61F21AE0 1
7FFF61F21AE0 0
7FFF61F21AE0 4387892
7FFF61F21AE0 0
7FFF61F21AE0 38
7FFF61F21AE0 1643256688
7FFF61F21AE0 4387915
7FFF61F21AE0 1
7FFF61F21AE0 27734032
7FFF61F21AE0 1005847240
如您所见, var_arg 正在产生垃圾。然而,第一次调用总是返回正确的值。
这里有什么问题?core.vararg 的源代码非常简单,我无法发现任何改变 7FFF61F21AE0 基础数据的东西