gpt4 book ai didi

c - 为什么在使用带有 %f printf 格式说明符的 float 时,clang 3.8 会发出警告?

转载 作者:行者123 更新时间:2023-12-04 11:24:25 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does printf() promote a float to a double?

(4 个回答)


4年前关闭。




这段代码:

#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.

最佳答案

printf()函数是 可变参数 , 或 可变参数 , 功能;一个接受可变数量的参数。
printf() 函数在 cppreference.com 中定义的方式如下:

int printf( const char *format, ... );

...表示此函数可以接受可变数量的参数。

在可变参数函数中,如果类型为 float 的变量传递给它,它会自动将其转换为 double值(value);从类型 float 的隐式转换输入 double已经完成了。

在您的代码中,您传递了一个浮点型变量 valueprintf() ,作为除 "%f\n" 之外的附加参数范围。因此,由于 printf()可变参数 函数,它转换 value输入 double在将其作为参数传递之前。根据您保留编译器警告的程度,它会向您发出警告。

希望这可以帮助!

关于c - 为什么在使用带有 %f printf 格式说明符的 float 时,clang 3.8 会发出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43011956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com