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

标签 c gcc type-conversion

我想知道为什么 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/

相关文章:

c - Netbeans 给出了对 PCRE 函数的 undefined reference

c++ - 了解 MSVS C++ 编译器优化

c++ - OpenBlas 和 g++

c - 查找西门子 C167 编译器

string - 是否有 Kotlin 原生方式将 float 格式化为小数位数?

c - 如何在 C 上将文本文件中的单词复制到数组

objective-c - 将 csv 转换为数据库并绘制数据 : advice on optimisation

c - 解析时忽略文件中的字符

c - c中是否有固定大小为两个字节的浮点类型?

csv - 将大量 .csv 文件转换为 SPSS 文件