我知道C语言使用序列点的概念来识别模糊计算,而赋值操作符“=”不是序列点。然而,我无法看出在执行语句i=++i时的任何歧义。按照我的理解,这只是将位于&i的值求值,对其进行递增并将其存回相同位置。然而,GCC将其标记为如下警告:[警告]操作“i”可能未定义[-Wsequence-point]。我是否对
=
操作的功能存在误解?编辑:在标记为重复之前,请注意我已浏览其他帖子,涉及序列点和未定义行为。其中没有一个特别涉及表达式i=++i(请注意pre-increment)。通常提到的表达式是i=i++、a=b++ + ++b等等。我对它们中的任何一个都没有疑问。
++i
返回的值可能会不同。我是说它总是返回i+1
。但是增量副作用可能发生在赋值之前或之后。在a = ++b;
中副作用发生的位置没有关系,因为没有自我赋值。 - Fred Larsoni+1
的值和修改&i
上的内容是独立的事件吗?所以返回计算出的值是实际操作,而增加i
内存位置上的值是使用++
运算符的副作用? - Qurious