如果使用printf格式化后没有参数会发生什么?

时间:2012-07-03 06:01:38

标签: c stack printf

  

可能重复:
  Behaviour of printf when printing a %d without supplying variable name

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

4 个答案:

答案 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)

它会打印垃圾值,但它的“转化次数比数据参数多%”警告。