c-为什么我= ++ i调用未定义的行为? [重复]

问题描述 投票:3回答:2

我知道C使用序列点的概念来识别模棱两可的计算,并且=运算符不是序列点。但是,在执行该语句时我看不出任何歧义

i = ++i

根据我的理解,这仅相当于对&i处的值进行评估,将其递增,然后将其存储回相同的位置。但是,GCC将其标记为:

[i]上的[警告]操作可能未定义[-Wsequence-point]

我是否缺少=的功能?

编辑:标记为重复之前,请注意,我已经浏览了有关序列点和未定义行为的其他文章。它们都不专门处理表达式i=++i(请注意pre>]-increment)。提到的表达式通常是i=i++a=b++ + ++b等。我对它们中的任何一个都没有疑问。

我知道C使用序列点的概念来识别模棱两可的计算,并且=运算符不是序列点。但是,我看不出执行...

c increment undefined-behavior operator-precedence sequence-points
2个回答
5
投票

您缺少有关未定义行为的信息。未定义的行为仅表示编译器可以执行任何所需的操作。它可能会引发错误,并且可能(如GCC一样)显示警告,它可能导致恶魔从您的鼻子中飞出。最主要的是,它不会表现well


2
投票

之所以出现未定义的行为,是因为在两个i之间多次修改了变量sequence points。序列点是可以看到先前评估的all

© www.soinside.com 2019 - 2024. All rights reserved.