c - 关于序列点和UB

标签 c undefined-behavior

<分区>

这里有个问题我解释不清楚。


哪个选项是错误的,为什么?

(A) a += (a++);   
(B) a += (++a);
(C) (a++) += a;
(D) (++a) += (a++);

AB 有什么区别?

我的理解: A 是一个 UB 但 B 可以,因为 ++a 的副作用将在赋值之前完成。是吗?

更新:序列点内++aa++有什么区别? pre-increment(decrement) 的副作用可能在下一个 seq-point 之前的任何时间完成,就像 post-increment(decrement) 一样?

最佳答案

Which option is wrong and why?

所有这些都是错误的,那是因为前两个调用未定义的行为,而后两个不编译。 (如果他们这样做了,他们也会调用 UB。)

关于c - 关于序列点和UB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18382882/

相关文章:

c - 为什么 SetFilePointerEx 的第二个参数在编译时给我一个不兼容的类型错误?

c - OpenMP 范围界定 - 段。共享错误()

c - c 系统的模块化

c - 将数据打印到输出文件时出现问题

c++ - 引用临时变量 - 为什么编译器检测不到它?

c - 在没有 malloc 的情况下在 C 中实现一个简单的链表

c++ - 写入二进制数据

c++ - 在这种情况下捕获访问冲突是否安全?

.net - 这个 hack 是 T4 的定义行为吗

c++ - 在初始化中使用新声明的变量(int x = x+1)?