Sco*_*ter 5 c clang compiler-warnings
这段代码:
#include <stdio.h>
int main(void)
{
float value = 10.10f;
printf("%f\n",value);
}
Run Code Online (Sandbox Code Playgroud)
在 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.
Run Code Online (Sandbox Code Playgroud)
该printf()函数是一个可变参数或可变参数函数;一个接受可变数量的参数。cppreference.com中printf()函数的定义方式如下:
Run Code Online (Sandbox Code Playgroud)int printf( const char *format, ... );
在...表明这个函数可以接受可变数量的参数。
在可变参数函数中,如果float传递给它一个类型的变量,它会自动将它转换为一个double值;从类型到类型的隐式转换完成。floatdouble
在您的代码中,您将一个浮点类型变量value传递给printf(),作为除了参数之外的附加"%f\n"参数。因此,由于printf()是一个可变参数函数,它在将其作为参数传递之前转换value为类型double。根据您保留编译器警告的程度,它会向您发出警告。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
2640 次 |
| 最近记录: |