【发布时间】:2014-08-27 19:29:29
【问题描述】:
以下代码没有显示预期的输出,即垃圾值(奇怪的是这些值被交换了)
#include<stdio.h>
int main()
{
float f = 4.6;
int d = 7;
printf("%d %f\n",f,d);
return 0;
}
输出: 7 4.600000
【问题讨论】:
-
何不真的搞得一团糟:
printf("%d %f\n",(int)f,(float)d); -
标准说:C11 7.21.6.1:“如果任何参数不是相应转换规范的正确类型,则行为未定义。”
-
所以不要那样做。当格式字符串是文字时,一些编译器(尤其是 gcc)可以警告
printf的参数不匹配,但通常完全取决于您是否正确调用printf。 -
那是哪个 ABI(处理器、编译器……)?我猜整数和浮点值在不同的寄存器中传递。
-
如果您使用
gcc -Wall -g编译,您将收到一条警告消息,然后您将在几秒钟内改进错误的源代码。