float z = 85886696878585969769557975866955695.E0;
//整溢出.
real x = 0x1p-16383;
//不能表示该数.
它是为了支持UFCS(通用函数调用语法).D兼容C的想法是,当代码有不同含义时,不要*安静*破坏代码.因此,这些,在D中会生成错误消息(尽管错误消息还可改进).
那么,ImportC可工作吗?
test2.c:
float z = 85886696878585969769557975866955695.E0;
long double x = 0x1p-16383;
//dmd -c test2.c
//不能表示`0x1p-16383`.
第1个与ImportC编译的一样.不可表示,截断为0.ImportC似乎应接受,如果接受,是否误导用户,这是非0?
这是判断问题.
如果定义了正确的函数,它可安静破坏代码.以下示例在C和D中有效(导入/包含除外),但打印出不同的值:
// #include <stdio.h>
import core.stdc.stdio;
int E2(int i)
{
return i;
}
int main()
{
float f = 123.E2;
printf("%f\n", f);
return 0;
}
除了基本的C不兼容外,如字面不是选项,需要关于歧义的警告.
用ImportC编译与用D编译相同代码,却结果不同.真是坑.
real x = 0x1p-16383L;
//这样,就可以了,加个L.
天哪,这就解决了.










