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
来对齐.
修复.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现