为什么clang 3.8在使用带有%f printf格式说明符的float时发出警告?
此代码:为什么clang 3.8在使用带有%f printf格式说明符的float时发出警告?,c,clang,compiler-warnings,C,Clang,Compiler Warnings,此代码: #include <stdio.h> int main(void) { float value = 10.10f; printf("%f\n",value); } printf()函数是一个可变的,或vararg函数;接受可变数量参数的人。 中定义printf()函数的方式如下: …表示此函数可以接受数量可变的参数 在变量函数中,如果向其传递float类型的变量,它将自动将其转换为double值;完成了从类型float到类型double的隐式转换 在代码中,除了%
#include <stdio.h>
int main(void)
{
float value = 10.10f;
printf("%f\n",value);
}
printf()
函数是一个可变的,或vararg函数;接受可变数量参数的人。
中定义printf()函数的方式如下:
…
表示此函数可以接受数量可变的参数
在变量函数中,如果向其传递float
类型的变量,它将自动将其转换为double
值;完成了从类型float
到类型double
的隐式转换
在代码中,除了%f\n“
参数外,还将浮点型变量值
传递给printf()
。因此,由于printf()
是一个vararg函数,它将value
转换为typedouble
,然后将其作为参数传递。根据您将编译器的警告保持在多高的水平,它会向您发出该警告
希望这有帮助 因为在vararg函数中,好的,谢谢!你应该做出这样的评论作为回答。
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.
int printf( const char *format, ... );