評価順序が「左から右」として指定され、言語が(疑似)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
評価順序が「左から右」として指定され、言語が(疑似)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
シーケンスポイントは、言語標準でシーケンスポイントとして定義されているものです。これから説明する答えは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?
x
my_func
は実行前にインクリメントされますが、引数としてmy_func
の古い値を使用して呼び出されます。x
my_func(x++ + --x); // combining those above
最初のものと同じ理由で未定義。