d的ctod工具
原文
下载地址
在ImportC
之前,翻译glfw-d
和libsoundio-d
来帮助翻译的工具.
1库,2库.
用树解析器帮助解析包括预处理器指令
的.c
或.h
文件,然后在需要
时,用大致等效的D模式
替换C语法
模式.
示例:
#include <stdio.h>
#define TAU 6.283185307179586476925
int main(void) {
char buf[32];
sprintf(buf, "tau = %f\n", TAU);
注意, 该行不是C语法
return 0;
}
输出:
module main;
@nogc nothrow:
extern(C): __gshared:
public import core.stdc.stdio;
enum TAU = 6.283185307179586476925;
int main() {
char[32] buf;
sprintf(buf.ptr, "tau = %f\n", TAU);
注意, 该行不是C语法
return 0;
}
你需要翻译(非平凡的)宏,由于D更严格的类型系统而修复错误,及其他杂项ctod
尚未正确翻译
问题.
随着ImportC
的兴起,该工具的用例减少了,但是如果仍然发现自己
转换C为D
,我希望这对你有用!
我想说,这对我来说非常有用!我花了很多时间翻译raylib
中的一个大约有6000
行的文件(它还没有完全完成,只是因为我目前不支持WASM
).处理所有死记硬背
的乏味问题是最大的痛苦.
有数万行
代码需要翻译,其中大部分在raylib
从其他项目中截取的仅头文件
库中(在"外部"目录中可见).在几个小时的时间里,我已用ctod
翻译了其中的3个文件,结果表明对C语言
构建的要求更少.
最初
计划是保留内部内容为C
,因为它仅在内部用于raylib
(如音频文件读取,压缩
等).我打算为各种架构
提供内部C内容的二进制库
,这样你就可用dub
.
但是现在有了该工具,我想有机会制作完整的移植
,所以不需要外部工具或依赖项
!
如果你想使用现有库,ImportC
非常好.但这仍然表明你正在使用C库.如,raylib
的所有文本处理
都使用以空字符
结尾串.它使用malloc/free
内存管理(它充满了缓冲区溢出
的可能性,就像典型的C项目可能一样).更不用说缺乏重载等.
使用ImportC
,也许可使用raylib
与当前的CAPI
一起.但是使用ctod
,我可在raylib
的基础上创建使用起来更加有趣和直观
的D库
.
谢谢丹尼斯
!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现