我知道C使用序列点的概念来识别模棱两可的计算,并且=
运算符不是序列点。但是,在执行该语句时我看不出任何歧义
i = ++i
根据我的理解,这仅相当于对&i
处的值进行评估,将其递增,然后将其存储回相同的位置。但是,GCC将其标记为:
[i]上的[警告]操作可能未定义[-Wsequence-point]
我是否缺少=
的功能?
编辑:标记为重复之前,请注意,我已经浏览了有关序列点和未定义行为的其他文章。它们都不专门处理表达式i=++i
(请注意pre>]-increment)。提到的表达式通常是i=i++
,a=b++ + ++b
等。我对它们中的任何一个都没有疑问。
我知道C使用序列点的概念来识别模棱两可的计算,并且=运算符不是序列点。但是,我看不出执行...
您缺少有关未定义行为的信息。未定义的行为仅表示编译器可以执行任何所需的操作。它可能会引发错误,并且可能(如GCC一样)显示警告,它可能导致恶魔从您的鼻子中飞出。最主要的是,它不会表现well
之所以出现未定义的行为,是因为在两个i
之间多次修改了变量sequence points。序列点是可以看到先前评估的all