c - 为什么 `x--> 0` 不是未定义的行为,而 `x = x--` 是?

标签 c operators decrement

众所周知,这个从零开始循环:

while (x-- > 0) { /* also known as x --> 0 */
  printf("x = %d\n", x);
}

但是 x = x-- 产生 undefined behaviour .


这两个示例都需要一些 x-- 的“返回”值,我猜这不存在。怎么可能 x--> 0 被定义而 x = x-- 没有呢?

最佳答案

因为在 x = x-- 中,您正在两次修改 x 的值,而没有插入序列点。所以操作顺序没有定义。在x--> 0中,修改了一次x的值,明确定义了x--的求值结果为递减前 x 的值。

关于c - 为什么 `x--> 0` 不是未定义的行为,而 `x = x--` 是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4924376/

相关文章:

javascript - 尝试更改 "total_price"变量的值,但在 Javascript 中得到 "Undefined"

javascript - Angular 中 *ngFor 的减量索引

c - C(gcc) 编译器中的递增和递减

c - 禁用硬件预取器的效果未反射(reflect)在访问时间中,未显示访问时间的任何差异

c - 编写一个程序来计算一个字符在文件中出现的次数。 (不区分大小写... 'a'和 'A'被认为是相同的)

c++ - 检查 C++11 中运算符是否存在的最佳方法

Python:有什么区别 - abs 和 operator.abs

c - FFMPEg 和 gcc 问题

c - 头文件和函数,是我的函数、参数还是头原型(prototype)?

bash - 在 if 语句中使用 && 运算符