【发布时间】:2009-08-21 20:31:44
【问题描述】:
我正在将 C 库的头文件转换为 D 模块,并且想知道如何处理 C 字符串。
使用 DMD 1,这可行:
void f(char* s); // Definition for C library's function.
但使用 DMD 2(我个人使用,但我希望模块同时适用于两者)字符串是 const,因此要使用模块来获得相同的代码来工作需要
void f(const(char)* s); // Definition for C library's function.
我该怎么办?只需使用char* 并使“客户端”代码以某种方式使字符串可变?还是根据编译代码的编译器版本修改类型?如果是前者,使它们可变的最佳方法是什么?我认为 .dup 会做到这一点,但编译器没有它。如果是后者,我将如何去做?我试过这个:
version (D_Version2) {
alias const(char)* charptr;
} else {
alias char* charptr;
}
void f(charptr s);
但是,遗憾的是,DMD 2 版本不是 DMD 1 的有效代码,并且版本块中的所有代码都必须是编译代码的编译器的有效代码,即使该代码不会包含在生成的可执行文件中。所以目前代码在两者中都可以编译,但你必须先修改别名,正如你可以想象的那样,这并不理想。
【问题讨论】: