这是C / C ++中未定义的行为(第2部分)

这个问题在这里已经有了答案:

  • 为什么这些构造(使用++)在C中的未定义行为? 13个答案
  • 未定义的行为和序列点4个答案

  • 由于以下两个原因而未定义:

  • i的值在不插入序列点的情况下使用两次(参数列表中的逗号不是逗号运算符,也不引入序列点)。

  • 你在范围内调用一个没有原型的可变参数函数。

  • 传递给printf()的参数数量与格式字符串不兼容。

  • 默认的输出流通常是行缓冲的。 如果没有'n' ,则不能保证输出将被有效输出。


  • 所有参数在调用函数时都会被计算,即使它们没有被使用,所以,由于函数参数的计算顺序是未定义的,所以您再次使用UB。


    我认为这是明确的。 printf将第一个%占位符与第一个参数相匹配,在这种情况下,它是一个预先增加的变量。

    链接地址: http://www.djcxy.com/p/73239.html

    上一篇: Is this undefined behavior in C/C++ (Part 2)

    下一篇: Why are multiple statements in ternary operator not executed