可能重复:
Behaviour of printf when printing a %d without supplying variable name
如果我使用例如printf(“%d%d”)会发生什么情况; ? 它会从堆栈中弹出最后八个字节并打印出来吗?
答案 0 :(得分:1)
在GCC中 - 您会收到警告(这是使用__attribute__ ((__warn_unused_result__))
完成的)。
在x86上,您不会收到堆栈错误,因为调用者会将数据推送到堆栈,并且在返回函数后也会弹出。这称为C调用约定,与pascal不同,其中函数也会从堆栈中弹出数据(例如,在ASM中使用ret 10
)。
您需要的数据值将是随机的。
答案 1 :(得分:0)
技术上,如果printf()
中的格式说明符数大于参数数,则其未定义的行为。
但是以下是好的
printf("%d",x,y); // y is evaluated but not printed.
答案 2 :(得分:0)
在这种情况下,你将获得依赖于编译器及其编译选项的garbage data
....
答案 3 :(得分:0)
它会打印垃圾值,但它的“转化次数比数据参数多%”警告。