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 @   zjh6  阅读(13)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示