gpt4 book ai didi

c - gcc scanf 警告认为 float 是 double

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

我对来自 gcc 编译器的警告消息有疑问。当 scanf 的参数不是指向应承载用户输入的变量的指针时,会出现警告消息。

#include <stdio.h>

int main(int argc, const char *argv[]) {
float number;
scanf("%f", number); /* the value of 'number' is passed, instead of the adress to it */
return 0;
}

gcc在编译程序时会给出如下警告信息。

scanf-problem.c: In function 'main':
scanf-problem.c:5:5: warning: format '%f' expects argument of type 'float *', but argument 2 has type 'double' [-Wformat=]
scanf("%f", number);
^

正如预期的那样,gcc 希望 scanf 的第二个参数具有“float *”类型(指向 float 的指针)。令我困扰的是 gcc 认为第二个参数的类型为“double”,而实际上它的类型为“float”。

这让我想到了一个问题,为什么 gcc 认为 scanf 的第二个参数是 double ,而实际上它是一个 float ?

我已经对这个主题进行了一些研究以获得答案,但我找到的每个答案都是关于如何摆脱警告(写'&number'而不是'number')。

最佳答案

Which leads me to the question, why do gcc believe the second argument of scanf to be a double, when it actually is a float?

因为 float 被提升为 C 标准中指定的 double

6.5.2.2 Function calls

[#6] ... arguments that have type float are promoted to double. These are called the default argument promotions.

[#7] ... The ellipsis notation in a function prototype declarator causes argument type conversion to stop after the last declared parameter. The default argument promotions are performed on trailing arguments.

关于c - gcc scanf 警告认为 float 是 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19049043/

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