• ベストアンサー

三項演算子のコンパイルについて

(x>z) ? (y=c*c) : (y=0); というのを、コンパイルするときになぜカッコが必要か詳しく教えていただけませんか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Lchan0211
  • ベストアンサー率64% (239/371)
回答No.2

三項演算子(条件演算子)より、代入演算子(=)の方が優先順位が低いためです。 (参考) 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; と記述するのが三項演算子らしい書き方です。

yt1012
質問者

お礼

とても、よくわかりました。ありがとうございました。

その他の回答 (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; のほうが普通かな

yt1012
質問者

お礼

ありがとうございました。

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

……見やすいから? 括弧が無かったらエラー出るんでしたっけ?

yt1012
質問者

お礼

はい。たぶん出ます。 ありがとうございました。

関連するQ&A