++ -- 演算子についての質問。
Posted: 2007年4月15日(日) 14:19
http://www.kouno.jp/home/c_faq/c3.html#0
のサイトにある
>i++は副作用をもたらす。つまりiの値を変更する。式の他のところで iが参照されているので、このことが未定義の振舞いを引き起こす (K&Rの言い回しではこの式の振る舞いは不定であると取れるが、C規 格は一段と厳しく未定義であるとしている。-- 質問11.33を参照のこ と)。
>後置増分演算子++も後置減分演算子--も元の値を返した後で、その演 算を行う。この"後"の意味付けがしばしば誤解を招く。前回値を産み 出したすぐ後で、かつ式のその他の部分が評価される前に、++や--が 増分や減分を行うことは保証されていない。単に式が"終了"する前 (ANSI Cの用語でいえば次の"副作用完了点"(sequence point)の前。 質問3.8を参照)のどこかで更新が実行されることが保証されているだ けである。上の例では、前回値と前回値を掛け合わせてから両方の増 分を実行することをコンパイラは選んだ。
副作用があいまいな部分が複数あるコードのふるまいは、常に未定義 である。(大まかに言うと、「副作用があいまいな部分が複数ある」 とは、++, --, =, +=, -=, etc. の組み合わせのいずれかが1つの式 の中に洗われ、同じオブジェクトが2回変更されたり、変更されてか ら値を調べられることを意味している。これは荒っぽい定義である。 正確な定義は質問3.8を参照のこと。"未定義"の意味については質問 11.33を参照のこと)自分の使っているコンパイラがそのような副作用 を持つコードをどう実装しているか調べるようなこともしてはいけな い(多くのCの教科書に載っている愚かな練習問題であるが、お薦めは しない)。K&Rが指摘しているように「もし様々なマシンでどうやって やって実行してるのか、わからなければ、わからないということが助 けとなるかもしれない。」
という説明があり前回置について解説してください><;
あと、副作用になる理由がいまいちわかりません・・・。。
のサイトにある
>i++は副作用をもたらす。つまりiの値を変更する。式の他のところで iが参照されているので、このことが未定義の振舞いを引き起こす (K&Rの言い回しではこの式の振る舞いは不定であると取れるが、C規 格は一段と厳しく未定義であるとしている。-- 質問11.33を参照のこ と)。
>後置増分演算子++も後置減分演算子--も元の値を返した後で、その演 算を行う。この"後"の意味付けがしばしば誤解を招く。前回値を産み 出したすぐ後で、かつ式のその他の部分が評価される前に、++や--が 増分や減分を行うことは保証されていない。単に式が"終了"する前 (ANSI Cの用語でいえば次の"副作用完了点"(sequence point)の前。 質問3.8を参照)のどこかで更新が実行されることが保証されているだ けである。上の例では、前回値と前回値を掛け合わせてから両方の増 分を実行することをコンパイラは選んだ。
副作用があいまいな部分が複数あるコードのふるまいは、常に未定義 である。(大まかに言うと、「副作用があいまいな部分が複数ある」 とは、++, --, =, +=, -=, etc. の組み合わせのいずれかが1つの式 の中に洗われ、同じオブジェクトが2回変更されたり、変更されてか ら値を調べられることを意味している。これは荒っぽい定義である。 正確な定義は質問3.8を参照のこと。"未定義"の意味については質問 11.33を参照のこと)自分の使っているコンパイラがそのような副作用 を持つコードをどう実装しているか調べるようなこともしてはいけな い(多くのCの教科書に載っている愚かな練習問題であるが、お薦めは しない)。K&Rが指摘しているように「もし様々なマシンでどうやって やって実行してるのか、わからなければ、わからないということが助 けとなるかもしれない。」
という説明があり前回置について解説してください><;
あと、副作用になる理由がいまいちわかりません・・・。。