c - 输出预测

标签 c printf variadic-functions

什么应该是输出:(为什么?)

printf("%d",2.37);

显然,printf 是一个可变参数函数,我们永远无法知道可变参数列表的类型。所以我们总是必须手动指定格式说明符。 因此,根据 IEEE 标准,2.37 将存储为 double,将以整数格式获取和打印。 但是输出为0。 这是什么原因?

最佳答案

这是未定义的行为。您正在将一个 double 参数传递给一个函数,该函数期望从其可变参数宏中检索一个 int,并且根本不知道这将导致什么。理论上,它甚至可能会崩溃(使用指定不同类型的可变参数以不同方式或在不同堆栈上传递的调用约定)。

关于c - 输出预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7097156/

相关文章:

.net - 如何使用 AmazonS3.net sdk 重命名存储桶内的文件夹

有人可以帮我处理这个比较数组吗?

c - printf() 导致乱码

c - 如何取任何整数,例如 10050,并将其输出为 $100.50?

c++ - 使用可变模板参数的构造函数和函数

使用不同编译器的 C++ 和可变参数

c - 我如何混合使用字符串文字和 float 并将它们连接成 C 中的一个字符串?

c - 当为 unsigned char 分配大于 255 的整数时,它会给出不同的输出,为什么?

c - 为什么我在执行 printf ("%f",3/2) 时得到 2.168831?

c++ - 具有空参数包的递归可变参数模板(以避免基本情况的重复)