在ImportC
之前,翻译glfw-d
和libsoundio-d
来帮助翻译的工具.
1库,2库.
用树解析器帮助解析包括预处理器指令
的.c
或.h
文件,然后在需要
时,用大致等效的D模式
替换C语法
模式.
示例:
输出:
你需要翻译(非平凡的)宏,由于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库
.
谢谢丹尼斯
!