输出预测

时间:2011-08-17 17:47:24

标签: c printf variadic-functions

什么是输出:(以及为什么?)

printf("%d",2.37);

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

1 个答案:

答案 0 :(得分:3)

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