2311d导入c的语义不同
原文
以下D代码正常
工作:
enum X = "X";
import core.stdc.stdio;
void main(){
puts(X);
}
但是,如果该X枚举
是C文件
中#define
的结果,则会出现错误:
//`x.c`
#define X "X"
//D代码
import x;
import core.stdc.stdio;
void main(){
puts(X); //错误
}
错误:不能用"(char[2])"
参数类型调用"core.stdc.stdio.puts(scope const(char*)s)"
函数
无法传递"char[2]"
类型参数的"X"
给"scopeconst(char*)s"
参数.
是因为C字面
是char[2]
而不是const(char)[2]
.我会调查的.
问题出在expressionsem.d(4188)
:
if (sc && sc.flags & SCOPE.Cfile)
e.type = Type.tchar.sarrayOf(e.len + 1);
else
e.type = Type.tchar.immutableOf().arrayOf();
不确定解决方法
及是否
应该修复,毕竟C语义
是不同的.
虽然,作为变通,可以:
puts(X.ptr);