評価の順序が「左から右」で、言語が(擬似的な)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
最初のものと同じ理由で未定義です。
Cの「シーケンスポイント」は、正確な定義を持っています。あなたの "(疑似)Cのような"言語は、同じ方法でシーケンスポイントを定義しますか? –
これは私の練習問題の抜粋であり、テキストは正確に私が書いたことを述べています。「動的スコープを持つC言語、浅い綴じ込み、左から右への表現評価」。その他何も... – gremo