- ベストアンサー
三項演算子のコンパイルについて
(x>z) ? (y=c*c) : (y=0); というのを、コンパイルするときになぜカッコが必要か詳しく教えていただけませんか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
三項演算子(条件演算子)より、代入演算子(=)の方が優先順位が低いためです。 (参考) http://www5c.biglobe.ne.jp/~ecb/c/05_10.html (x>z) ? y=c*c : y=0; というコーディングをした場合、 最初の「=」の左辺は「(x>z) ? y」であると認識され、 文法エラーとなります。 そもそも、三項演算子とは、条件に応じて値を決定する 演算子であるため、2項目、3項目の中に 代入演算子を記述するようなコーディングはしません。 質問にあるようなケースは、 y = (x>z) ? c*c : 0; と記述するのが三項演算子らしい書き方です。
その他の回答 (2)
- php504
- ベストアンサー率42% (926/2160)
回答No.3
(x>z) ? y=c*c : y=0; だと ((x>z) ? y=c*c : y) = 0; と解釈されるから ((x>z) ? y=c*c : y)に0は代入できませんね (x>z) ? y=c*c : (y=0); なら大丈夫でしょう y = (x>z) ? c*c : 0; のほうが普通かな
質問者
お礼
ありがとうございました。
- Trick--o--
- ベストアンサー率20% (413/2034)
回答No.1
……見やすいから? 括弧が無かったらエラー出るんでしたっけ?
質問者
お礼
はい。たぶん出ます。 ありがとうございました。
お礼
とても、よくわかりました。ありがとうございました。