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

标签 c++ c undefined-behavior

<分区>

关于序列点的规则对以下代码说明了什么?

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

只有一个 %d。我很困惑,因为我在编译器 GCC、Turbo C++ 和 Visual C++ 中得到 6 作为输出。行为是否明确定义或什么?

这与我的last question有关.

最佳答案

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

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

  2. 您正在调用范围内没有原型(prototype)的可变参数函数。

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

  4. 默认输出流通常是行缓冲的。如果没有 '\n',则无法保证输出将有效输出。

关于c++ - 这是 C/C++ 中的未定义行为吗(第 2 部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5390274/

相关文章:

c++ - 在声明与实现中访问方法

c++ - 选择替代实现和前向声明

c - 两个数组的总和

c - 解锁一个已经解锁的线程

c++ - std::map - 递减迭代器给出奇怪的结果?

c++ - QTextEdit。如何手动选择文本?

c++ - `const T` 和 `T` 在采用嵌套类型时没有区别吗?

c - 动态内存分配不匹配

c - 将 printf 重定向到 IAR Embedded Workbench 上的控制台 I/O

c - 返回 ;这个语句返回什么?