【发布时间】:2012-07-03 06:01:38
【问题描述】:
可能重复:
Behaviour of printf when printing a %d without supplying variable name
如果我使用 printf("%d %d"); 会发生什么? ? 它会从堆栈中弹出最后八个字节并打印出来吗?
【问题讨论】:
可能重复:
Behaviour of printf when printing a %d without supplying variable name
如果我使用 printf("%d %d"); 会发生什么? ? 它会从堆栈中弹出最后八个字节并打印出来吗?
【问题讨论】:
在 GCC 中 - 您会收到警告(这是使用 __attribute__ ((__warn_unused_result__)) 完成的)。
在 x86 上不会出现堆栈错误,因为调用者会将数据推送到堆栈,并在函数返回后弹出。这称为 C 调用约定,与 pascal 不同 - 其中函数还将从堆栈中弹出数据(例如在 ASM 中使用 ret 10)。
您需要的数据值是随机的。
【讨论】:
如果printf() 中的格式说明符的数量大于参数的数量,从技术上讲,它的行为未定义。
但是下面的很好
printf("%d",x,y); // y is evaluated but not printed.
【讨论】:
在这种情况下,您会得到garbage data,它依赖于编译器及其编译选项......
【讨论】:
它会打印垃圾值,但会显示“转换次数比数据参数多”警告。
【讨论】: