3項演算子のgcc拡張
http://tiki.is.os-omicron.org/tiki.cgi?c=v&p=gcc%A4%CE%B3%C8%C4%A5%B5%A1%C7%BD
x ? x : y
の最初の返値を省略して
x ?: y
と書けることを知った。
つまり、ruby で
v = x || y || z
と書くところを、C でも
v = x ?: y ?: z;
こんな感じに書けるわけだ。これはいい。
この書き方だと、x や y が一度しか評価されないので、マクロを書くときに便利だと思う。
追記 (2007.9.28)
gcc では、|| を使うと 0 か 1 になるので、?: に利用価値がある。
printf("%d", 2 || 4); // => 1 printf("%d", 2 ?: 4); // => 2