C言語編 目次

 関数設計

 

・関数名の命名規則
・プログラミングに出る!英単語

 ポインタ

 

・データ型とポインタ

 データ型

 

・char *とconst char *は違う
・符号付きと符号なし

 演算子

 

・三項演算子とデータ型の問題

 制御構文

 

・条件式で代入する
・三項演算子を使ったswitch

 構造体

 

・構造体のサイズとアライメント
・構造体メンバのサイズを知る

 配列

 

・配列使用時の注意
・配列の要素数を知る

 メモリ管理

 

・メモリスタック
・動的メモリ確保とメモリリーク

 モジュール設計

 

・モジュール分割
・汎用モジュールとアプリ依存モジュール

 パフォーマンス
  徹底チューニング

 


・どんな処理に時間がかかるのか
・ファイル入出力の効率化
・アルゴリズムを考える1
・アルゴリズムを考える2

 プリプロセッサの便利機能


・2重インクルード防止

 


トップページへ戻る

三項演算子を使ったswitch

 最初に、次のような関数を見てみます。引数によって返す値が変わります。ここでは戻り値は、switch文を使って代入しています。

#define COL_NONE         (0)
#define COL_BLUE         (1)
#define COL_RED          (2)
#define COL_YELLOW       (3)

#define SEASON_SPRING    (1)
#define SEASON_SUMMER    (2)
#define SEASON_AUTUMN    (3)
#define SEASON_WINTER    (4)

int GetColor(int season)
{
    int        color;

    switch (season)
    {
    case SEASON_SUMMER:
        color = COL_RED;
        break;
    case SEASON_WINTER:
        color = COL_BLUE;
        break;
    default:
        color = COL_YELLOW;
        break;
    }
    return color;
}

 このようなswitch文を使った代入文は、三項演算子を使って、次のように書き換えることができます。

#define COL_NONE         (0)
#define COL_BLUE         (1)
#define COL_RED          (2)
#define COL_YELLOW       (3)

#define SEASON_SPRING    (1)
#define SEASON_SUMMER    (2)
#define SEASON_AUTUMN    (3)
#define SEASON_WINTER    (4)

int GetColor(int season)
{
    int        color;

    color = (season == SEASON_SUMMER) ? COL_RED :
            (season == SEASON_WINTER) ? COL_BLUE : COL_YELLOW;

    return color;
}

 三項演算子を2つ使って、3パターンの代入をしているわけです。このほうがswitch文を使うよりもスマートな書き方になりますよね。

 この方法で何パターンの代入でも三項演算子で記述できますが、あまり多くなると、かえってプログラムが読みにくくなるので、この書き方をするのは、3パターン以下の場合にとどめておいたほうがよいでしょう。それより多い場合は、switch文を使ったほうが読みやすくなります。