0

評価順序が「左から右」として指定され、言語が(疑似)Cのようなものである場合、次の例のシーケンスポイントはどれですか。

int x = 1;
int z = x-- + x; // z = 1 + 0 or z = 1 + 1?
my_func(x++); // x incremented before or after my_func execution?
my_func(x++ + --x); // combining those above
4

1 に答える 1

2

シーケンスポイントは、言語標準でシーケンスポイントとして定義されているものです。これから説明する答えはCにも当てはまりますが、別の「Cに似た」言語は、さまざまなシーケンスポイントを定義している可能性があり、したがって、これらの質問に対するさまざまな答えがあります。

int z = x-- + x; // z = 1 + 0 or z = 1 + 1?

はCのシーケンスポイントではないため+、上記のステートメントの結果は未定義です。

my_func(x++); // x incremented before or after my_func execution?

xmy_funcは実行前にインクリメントされますが、引数としてmy_funcの古い値を使用して呼び出されます。x

my_func(x++ + --x); // combining those above

最初のものと同じ理由で未定義。

于 2011-01-16T00:55:54.653 に答える