d的ctod工具

原文
下载地址
ImportC之前,翻译glfw-dlibsoundio-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库.
谢谢丹尼斯!

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