这是C / C ++中未定义的行为(第2部分)
这个问题在这里已经有了答案:
由于以下两个原因而未定义:
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