我正在将C库的头文件转换为D模块,我想知道应该如何处理C字符串。
使用DMD 1,可以:
void f(char* s); // Definition for C library's function.
但是,使用dmd 2(我个人使用,但我希望两个模块都能使用)字符串是常量,因此要使用模块来获得相同的代码,需要
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来说不是有效的代码,并且版本块中的所有代码都必须是编译器编译代码的有效代码,即使代码不会包含在生成的可执行文件中。因此,目前代码在这两种情况下都可以编译,但是您必须首先修改别名,正如您可以想象的那样,这并不理想。