为什么%d不能自动将float值转换为printf()中的int?

时间:2018-05-11 06:26:19

标签: c printf

我正在阅读C开头编程,因为傻瓜遇到了一个我无法理解的代码

#include <stdio.h>

int main(void) 
{
    printf("The total is %d\n", 16.0 + 17);
}

将输出显示为:

The total is 0

我认为第一个16.0 + 17会自动键入强制转换为16.0 + 17.0 = 33.0,然后在打印它的值时会截断小数,最终输出将为:

The total is 33

你能解释为什么输出结果为0

1 个答案:

答案 0 :(得分:3)

printf的声明是这样的:

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

它需要可变长度参数,其中第一个format是必需的。但它不能提前知道后来的参数类型,即在编译期间。因此,为了确定后续参数的类型,即知道它必须从内存中读取多少字节,如何解释这些字节等,它完全取决于格式字符串中的格式说明符。

这就是格式说明符和实际类型必须匹配的原因。否则它将是未定义的行为,在这种情况下可能发生任何事情。