考虑这个简单的代码:
int foo = 4;
double d1 = sin (foo);
double d2 = foo * 0.1;
当我用gcc编译它时,结果是预期的(即数学上正确),即使sin()
期望double
作为其参数。看来gcc隐含地将foo
投放到double
。
这种隐式转换的可移植性如何,有哪些限制,我在哪里可以找到文档?
旁注:我知道 C ++ 编译器需要正确处理这样的转换。
答案 0 :(得分:5)
C99标准允许这种隐式转换(见6.5.2.2节,第7段)。
答案 1 :(得分:4)
完全便携。这种类型的转换是在所有编译器必须遵守的C语言标准中指定的。
答案 2 :(得分:0)
只要您提供正确的原型(通过包含正确的标头#include <math.h>
),标准就会强制调用sin
(将参数转换为double
)时的行为。
如果没有范围内的原型,则提供一个参数是未定义的行为,在默认促销之后,该参数的类型与函数期望的类型不同。