例如,如果我使用 printf("%d %d"); 会发生什么?? 它会从堆栈中弹出最后八个字节并打印出来吗?
问问题
463 次
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 回答