根据c标准j = i ++ * i ++未定义,但j = i ++& i ++合法的原因是什么?

时间:2013-10-22 18:06:28

标签: c post-increment

根据标准c,为什么j= i++ * i++未定义和j=i++ & i++完全合法的陈述?

3 个答案:

答案 0 :(得分:4)

它们都是未定义的行为。

j = i++ * i++; // undefined behavior
j = i++ & i++; // undefined behavior

对象i的值在两个示例中的两个序列点之间被多次修改。

答案 1 :(得分:1)

j= i++ * i++ ;

j=i++ & i++ ;

两者都未定义,因为更改了序列点之间的i值

阅读Why are these constructs undefined behavior?

答案 2 :(得分:1)

正如神秘主义和ouah所说,两者都是未定义的。

j = i++ && i++;

定义明确,因为&&快捷方式,这意味着,它必须首先评估左操作数,然后 - 如果左操作数为真 - 右操作数。