是否有关于gcc中“i = i--”行为的具体文档?

时间:2010-08-25 15:11:34

标签: c gcc standards c99 operator-precedence

再一次,我们最喜欢“i = i--”般的问题。在C99,我们有:

  

6.5表达式#2:在前一个和下一个序列点之间a   对象应具有其存储值   最多修改一次

     

70)本段提出   !未定义!语句表达式   比如

i = ++i + 1;

但是对于未完成的行为,可以存在从随机输出到“以文档化方式执行程序”的变体(c99 3.4.3)

所以,问题是:

gcc是否记录了i = i ++,i = i--等行为的行为

实际代码是

int main(){int i=2;i=i--;return i;}

4 个答案:

答案 0 :(得分:5)

GCC不会记录此行为。 Warning Options page提到-Wsequence-point中的序列点问题,但没有暗示明确定义的违规行为。

GCC确实有一个很好的C Implementation Defined Behaviour列表,但我在这里找不到任何对这个问题的引用。

答案 1 :(得分:1)

由后端实现决定它的作用。您可以使用-S并检查生成的代码以确定事件的确切顺序。

答案 2 :(得分:1)

没有记录,但即便如此,我也不想阅读它。在运行未定义的行为时,您永远不应该依赖于特定实现的功能。

答案 3 :(得分:0)

为什么你想要这样做呢?认真。我很好奇。