C中的隐式数字类型转换

时间:2011-11-07 14:05:35

标签: c gcc casting numbers

考虑这个简单的代码:

int foo = 4;
double d1 = sin (foo);
double d2 = foo * 0.1;

当我用gcc编译它时,结果是预期的(即数学上正确),即使sin()期望double作为其参数。看来gcc隐含地将foo投放到double

这种隐式转换的可移植性如何,有哪些限制,我在哪里可以找到文档?

旁注:我知道 C ++ 编译器需要正确处理这样的转换。

3 个答案:

答案 0 :(得分:5)

C99标准允许这种隐式转换(见6.5.2.2节,第7段)。

答案 1 :(得分:4)

完全便携。这种类型的转换是在所有编译器必须遵守的C语言标准中指定的。

答案 2 :(得分:0)

只要您提供正确的原型(通过包含正确的标头#include <math.h>),标准就会强制调用sin(将参数转换为double)时的行为。

如果没有范围内的原型,则提供一个参数是未定义的行为,在默认促销之后,该参数的类型与函数期望的类型不同。