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来对齐.
修复.

posted @ 2022-11-26 16:40  zjh6  阅读(21)  评论(0)    收藏  举报  来源