gpt4 book ai didi

c - GCC 不在 printf 中进行默认类型转换

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:11 26 4
gpt4 key购买 nike

我想知道为什么 gcc 不支持 printf 函数内的默认类型转换。例如:

printf("%f",(7/2));

得到未定义的行为,因为它期待一个 float 但得到一个整数值。

但是在像 -- float f=7/2; 这样的赋值的情况下,它默认进行类型转换。

printf不支持默认类型转换的原因是什么?我不是在问 C 规范,我是在问这种规范背后的逻辑是什么。如果有人用一些例子解释会更好。

最佳答案

C 语言标准没有指定将 printf 参数转换为格式字符串中的类型,因为这需要编译器 解释格式字符串,而不是让printf 这样做。

一些现代编译器会检查 printf 字符串并在它与参数不匹配时发出警告。但这是最近的发展。在开发 C 语言的那些年,编译器是比现在更简单的软件,并且添加它们解释 printf 格式字符串的要求在当时是不受欢迎的负担。

此外,编译时不一定知道格式字符串。您可以编写 printf(format, a, b, c),其中 format 在运行时计算。显然,编译器无法生成简单的代码来将 abc 转换为最终将在字符串格式。当然,这在理论上是可能的;编译器可以生成大量代码来处理运行时的所有情况。但对于不需要的功能来说,这将是过多的工作。

关于c - GCC 不在 printf 中进行默认类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705918/

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