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.
天哪
,这就解决了.