Diary
twitterもはじめました
3項演算子
C言語の文法くらいは(GCC拡張とかそういうのを除いて)完璧だと思っていたんだけど, Linuxカーネル読んでいて,「あれ?こんなシンタックス通るのか?」ってコードが出てきた。 どんなのかというと
a /= (a ? : b);
とかいうコード。3項演算子かと思いきや,2項しかない。普通,3項演算子というと
条件? 真の場合 : 偽の場合;
なんだけど,今回のは「真の場合」が書かれていない。 で,ちょっと自分でテストコードを書いてみると,
a /= (a ? a : b);
と同じ意味だったらしい。 条件に使う変数をそのまま真の場合に返すときは,省略可能なんだそうだ。 初めて知った。
ちなみに
a /= (a ? b : );
はエラーになるので注意。あくまで真の場合だけ省略できるっぽい。