2011-01-16 3 views
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

Cの「シーケンスポイント」は、正確な定義を持っています。あなたの "(疑似)Cのような"言語は、同じ方法でシーケンスポイントを定義しますか? –

+0

これは私の練習問題の抜粋であり、テキストは正確に私が書いたことを述べています。「動的スコープを持つC言語、浅い綴じ込み、左から右への表現評価」。その他何も... – gremo

答えて

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 

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

+0

z = ++ x + y ++の場合はどうですか?このステートメントは定義しないでください。 – gremo

+0

@Gremo:はい、それが定義されています。 'x'と' y'の両方が1だけインクリメントされ、 'z'は' x'の新しい値と 'y'の古い値の和になります。それはシーケンスポイントとは関係ありません。 x = 1の場合 – sepp2k

+0

; y = 2; z = 2 + 2; y = 3です。シーケンスポイントが何であると誤解したのでしょうか? – gremo

関連する問題