我想知道为什么 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
在运行时计算。显然,编译器无法生成简单的代码来将 a
、b
和 c
转换为最终将在字符串格式
。当然,这在理论上是可能的;编译器可以生成大量代码来处理运行时的所有情况。但对于不需要的功能来说,这将是过多的工作。
关于c - GCC 不在 printf 中进行默认类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20705918/