0

可能重复:
打印 %d 而不提供变量名时 printf 的行为

例如,如果我使用 printf("%d %d"); 会发生什么?? 它会从堆栈中弹出最后八个字节并打印出来吗?

4

4 回答 4

1

在 GCC 中 - 您会收到警告(这是使用 完成的__attribute__ ((__warn_unused_result__)))。

在 x86 上,您不会收到堆栈错误,因为调用者会将数据推送到堆栈,并在函数返回后弹出。这称为 C 调用约定,与 pascal 不同 - 其中函数还将从堆栈中弹出数据(ret 10例如在 ASM 中使用)。

您需要的数据值将是随机的。

于 2012-07-03T06:06:05.233 回答
0

如果格式说明符的printf()数量大于参数的数量,从技术上讲,它的未定义行为。

但是以下很好

printf("%d",x,y); // y is evaluated but not printed.

于 2012-07-03T06:04:11.007 回答
0

它将打印垃圾值,但它有“比数据参数更多的转换百分比”警告。

于 2012-07-03T06:18:03.333 回答
0

在这种情况下,您将获得garbage data依赖于编译器及其编译选项的内容......

于 2012-07-03T06:07:59.350 回答