TOP >> マニアックなプログラミング
トリッキーコードネット トリッキーなコード

【トリッキーなコード】三項演算子の書き方 及び 条件分岐代入について (C言語)

いきなりですが、三項演算子、皆さん使ってますか~~??

条件分岐には、「if-else」や「switch」を多用しがちですが(←かく言う私も、その内の1人^^;)、
たまには、三項演算子も愛してあげよう! というお話です。


三項演算子をネストさせることにより、switchの代わりに使うこともできます。

↓↓こんな感じ↓↓
result = (n == 0 ? 0処理 : n == 1 ? 1処理 : n == 2 ? 2処理 : デフォルト処理);
ちなみに、三項演算子を使用する際は、?と:は縦に揃えて書くのがマナーなんだそうです。 (ご存知でしたか??) そ~いえば、自らつけた「if-else, switchの使用禁止、条件分岐は全て三項演算子で行うこと」という制約下で、 コードをかいてた猛者(変人?)は知ってます。 まぁ、コードが読み辛くならなければ、何使って条件分岐しようが、関係ないんでしょうかね??^^;) 次に、ちょっぴり面白い三項演算子の小技をご紹介します。
#include <stdio.h> #include <time.h> // for time() #include <stdlib.h> // for srand() int main(void) { int i, a, b; a = 0; b = 0; srand((unsigned int)time(NULL)); for (i = 0; i < 10; i++) { a = b = 0; * ( (rand() % 2 == 0) ? &a : &b) = rand(); printf("%6d %6d\n", a, b); } return 0; }
変数a, bのどちらかにランダムな値を、もう一方には0をセットするプログラムです。 実行結果は以下の通り 三項演算子の条件分岐代入 三項演算子を使用し、代入先の変数を切り分けているのがトリッキーです^^;) ちなみに、
* ( (rand() % 2 == 0) ? &a : &b) = rand();
の部分は、
( (rand() % 2 == 0) ? a : b) = rand();
だと、コンパイルエラーになりますよ~。
トリッキーコードネット の TOPへ HOTNEWS の 総合TOPへ