我在mac os x上用c语言编程.我在math.h中使用sqrt,函数如下:
int start = Data -> start_number;
double localSum;
for (start; start <= end; start++) {
localSum += sqrt(start);
}
Run Code Online (Sandbox Code Playgroud)
这有效,但为什么呢?为什么我没有得到警告?在sqrt的手册页中,它需要一个double作为参数,但我给它一个int - 它如何工作?
谢谢
Ani*_*han 11
键入不会导致精度损失的转换可能不会引发警告.它们是隐含的.
int --> double //no loss in precision (e.g 3 became 3.00)
double --> int //loss in precision (e.g. 3.01222 became 3)
Run Code Online (Sandbox Code Playgroud)
触发警告的内容和不警告的内容在很大程度上取决于编译器和提供给它的标志,但是,大多数编译器(至少是我使用过的编译器)并不认为隐式类型转换dangerous足以保证警告,如它是语言规范中的一个特性.
C99理由表明它就像一条准则
探索这个(隐式转换)问题的一个重要结果是理解高质量的编译器可能很好地寻找这样可疑的代码并提供(可选的)诊断,并且尽责的教师可能会很好地警告程序员这些问题隐式类型转换.