Noo*_*low 3 c objective-c clang
unsigned long long i = 1000;
Run Code Online (Sandbox Code Playgroud)
现在不0.1*i应该自动转换成双倍?当我传入0.1*i一个期望的函数参数时,为什么编译器没有警告我unsigned long long?我认为编译器应该警告这种潜在的精度损失.
我有我的编译器,Clang,配置"-Weverything"向我展示所有可能的警告.
小智 6
是的,对整数和浮点数的操作会产生浮点数.但是当你将结果(这是一个双精度数)传递给一个期望无符号long long的函数时,就会自动发生隐式转换,结果将被截断为unsigned long long.
你为什么不收到警告?因为就像GCC一样,Clang的-Wall没有打开所有警告 - 你总是可以使用-Wextra来获得真正的所有警告.