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

30 浏览
0 Comments

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

这个问题已经有了答案

为什么这些使用前置和后置递增的结构是未定义的行为?

未定义行为和序列点

序列点规则对以下代码有什么影响?

int main(void) {
    int i = 5;
    printf("%d", ++i, i); /* Statement 1 */
}

只有一个%d。我很疑惑,因为编译器GCC、Turbo C++和Visual C++的输出结果是6。这种行为是否被定义良好了?

这与我的上一个问题有关。

admin 更改状态以发布 2023年5月21日
0
0 Comments

所有的参数在调用函数时都会被求值,即使它们没有被使用,因此,由于函数参数的求值顺序是未定义的,因此你又面临着未定义行为。

0
0 Comments

由于2个原因,它是未定义的:

  1. i的值被两次使用而没有插入一个序列点(参数列表中的逗号不是逗号运算符,也不会引入一个序列点)。

  2. 您正在调用一个没有原型的可变参数函数。

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

  4. 默认输出流通常是行缓冲的。没有'\n',不能保证输出将被有效输出。

0