EmptyRoom

Diary

twitterもはじめました

[421]2009/6/28(Sun) [tag: プログラミング, C言語 ]
3項演算子

C言語の文法くらいは(GCC拡張とかそういうのを除いて)完璧だと思っていたんだけど, Linuxカーネル読んでいて,「あれ?こんなシンタックス通るのか?」ってコードが出てきた。 どんなのかというと

a /= (a ? : b);

とかいうコード。3項演算子かと思いきや,2項しかない。普通,3項演算子というと

条件? 真の場合 : 偽の場合;

なんだけど,今回のは「真の場合」が書かれていない。 で,ちょっと自分でテストコードを書いてみると,

a /= (a ? a : b);

と同じ意味だったらしい。 条件に使う変数をそのまま真の場合に返すときは,省略可能なんだそうだ。 初めて知った。

ちなみに

a /= (a ? b : );

はエラーになるので注意。あくまで真の場合だけ省略できるっぽい。

1ページに表示する件数