d可变函数的栈对齐
import core.stdc.stdio;
import core.stdc.stdarg;
extern(C++) void print(long a, va_list args){
vprintf("值: %d\n", args);
}
void proxy0(long a, long b, long c, long d, bool e, ...){
print(a, _argptr);
}
void proxy1(long d, bool e, ...){
print(d, _argptr);
}
void main(){
int var = -5;
proxy0(1, 2, 3, 4, true, var);
proxy1(4, true, var);
}
用ldc2编译时,我得到了期望的行为,而dmd非期望.如果我删除extern(C++)或使用va_start()传递va_list而不是_argptr来打印,行为不变,与实际代码最相似,所以用这种方式.
应该用STACKALIGN而不是REGSIZE来对齐.
修复.
浙公网安备 33010602011771号