-1

そんな表現はダメだと思っていたのですが、コンパイルできて5になりました。

int main(void)
{
  int i=1;

  // how is the next line evaluated ie in what sequence??

  i=2+2*i++;
  printf("%d",i);
  return 0;
}

得られた出力は 5 でした。どのように値を与えるべきか理解できません。

4

1 に答える 1

4

iはシーケンス ポイント間で複数回変更されるため、これは未定義の動作です。たとえば、このコンパイラは、割り当ての後にインクリメントを配置するため、答えとして 4 を返します。インクリメントが割り当ての前にある場合、別の妥当な答えは 6 です。しかし、おわかりのように、コンパイラは 5 を含め、必要に応じて答えを作成することが許可されています。

シーケンス ポイントと未定義の動作の詳細については、こちらを参照してください。

于 2013-08-09T20:13:52.607 に答える