? :
C言語には B言語から引き継いだ「省力化」「簡略化」があります。増分演算子 x++
や複合代入演算子 x += y
などもそうですが,if
文を書かなくとも条件判断する「条件演算子」も又そうです。
■条件演算子(Conditional Operator)
式1 ? 式2 : 式3
式1
が 0
でない(真である)場合には,式2
を返し,0
(偽)のときには 式3
を返します。後に学ぶ if
文を使うと,
if(式1) { 式2 } else { 式3 }
を実行し,値を返していることになります。典型的な例は,2つの変数の最大値を求めるものです。
x > y ? x : y
第1オペランドは算術型でなければなりませんが,第2,第3オペランドについては双方が算術型のときだけでなく,双方が同じ構造体型でも許されます。(第2,第3オペランドについては,C99, 6.5.15 を参照のこと。)双方が算術型の場合には,通常の算術型変換によって式の値(右辺値)の型が決まります。