【问题标题】:What happens if there are no parameters after format using printf? [duplicate]如果使用 printf 格式化后没有参数会怎样? [复制]
【发布时间】:2012-07-03 06:01:38
【问题描述】:

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

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

【问题讨论】:

    标签: c stack printf


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      但是下面的很好

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

      【讨论】:

        【解决方案3】:

        在这种情况下,您会得到garbage data,它依赖于编译器及其编译选项......

        【讨论】:

          【解决方案4】:

          它会打印垃圾值,但会显示“转换次数比数据参数多”警告。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-07-01
            • 1970-01-01
            • 2021-06-06
            • 1970-01-01
            • 1970-01-01
            • 2015-08-21
            • 1970-01-01
            相关资源
            最近更新 更多