此代码:
#include <stdio.h>
int main(void)
{
float value = 10.10f;
printf("%f\n",value);
}
使用Ubuntu 14.04.1上的clang 3.8使用-Weverything选项编译:
clang -Weverything w-double-precision.c
w-double-precision.c:5:17: warning: implicit conversion increases floating-point precision: 'float' to 'double' [-Wdouble-promotion]
printf("%f\n",value);
~~~~~~ ^~~~~
1 warning generated.
答案 0 :(得分:4)
printf()
函数是可变参数或 vararg 函数;一个接受可变数量的参数。
在cppreference.com中定义printf()函数的方式如下:
int printf( const char *format, ... );
...
表示此函数可以接受可变数量的参数。
在可变参数函数中,如果向其传递float
类型的变量,它将自动将其转换为double
值;从类型float
到类型double
的隐式转换已完成。
在代码中,除了value
参数之外,还将浮点类型变量printf()
传递给"%f\n"
,作为附加参数。因此,由于printf()
是 vararg 函数,因此在将value
作为参数传递之前,它会将double
转换为类型<div class="row">
<div class="col-md-2" style="text-align: left">
Red:
</div>
<div class="col-md-2" style="text-align: left">
Apple
</div>
</div>
<div class="row">
<div class="col-md-2" style="text-align: left">
Green:
</div>
<div class="col-md-2" style="text-align: left">
Grass
</div>
</div>
<div class="row">
<div class="col-md-2" style="text-align: left">
Blue:
</div>
<div class="col-md-2" style="text-align: left">
Ocean
</div>
</div>
。根据您保存编译器警告的高度,它会向您发出警告。
希望这有帮助!