2013年8月11日日曜日

C++変数宣言の位置

C++ではブロック内のどこでも変数宣言が出来ると書きました。
使う前なら、どこでも自由に宣言できるのです。
それでは、変数を宣言する位置ついて詳しく見て行きましょう。

今、2つの変数の値を交換する関数を例に、変数を宣言する位置を見てみましょう。

void SwapFunction(int *a, inb *b)
{
    if (*a == *b) {
        return;
    }

    int buf = *a;    //ここで変数bufを宣言しています
    *a = *b;
    *b = buf;

    return;
}

変数bufはSwapFunction()関数のブロックの途中で宣言されています。
そして、宣言と同時に初期化もしています。


変数宣言は使う直前がオススメです
変数の宣言は、使う直前にするようにしましょう。
そうでないと宣言が無駄になることもありますし、読みやすさに違いが出てきます。
では、試しにSwapFunction()関数のはじめで変数bufを宣言してみます。

void SwapFunction(int *a, int *b)
{
    int buf;               //ここで変数bufを宣言しています

    if (*a == *b) {
        return;           //*a == *b なら何もせずに、returnします
    }

    buf = *a;            //ここは *a == *b の時には実行されません
    *a = *b;
    *b = buf;

    return;
}

使わないかもしれない変数をあらかじめ宣言しておくのは、無駄になってしまいます。(^_^;)
どうでしょうか、使う直前に宣言したほうが見やすくありませんか?


しかし、この場合途中リターンが見た目気持ち悪いという方もいるかもしれません。(^_^;)
もっとスマートに書くならこんな感じでしょうか?
お好みでどうぞ^^
こんなサンプルプログラムでも洗練させてみるのも面白いものですよ。

void SwapFunctionPart2(int *a, int *b)
{
    if (*a != *b) {       //2つの数が等しくなければ交換します
        int buf = *a;    //ここで変数bufを宣言
        *a = *b;
        *b = buf;
     }

    return;
}



今日の名言
度胸が欲しければ、恐ろしくて手が出ないことに挑んでみることだ。これを欠かさず
やり続けて成功の実績を作るのだ。
これが恐怖心を克服するための、もっとも迅速でしかも確実な方法である。
                                 デール・カーネギー

自分を激励する秘訣は、自分に向かってこう言い聞かせることだ。「自分と大して
知能の違わない、普通のできの人間でさえ、難問題を解決して者が数えきれない
ほどいるのに、自分にできないことがあるものか」
                                 ウィリアム・フェザー

我々は決して降伏もしなければ敗北もしない。最後の最後まで戦い抜くつもりだ。
我々はフランスで戦うし海上でも戦う。ますます自信を固めて空中でも戦い抜くのだ。
どんなに犠牲が大きかろうと、我々はこの国を守りぬくのだ。海岸で、上陸地点で、
戦線で、市街地で、山岳地で、あらゆる所で戦い抜くのだ。我々は決して降伏しない。
そして、たとえ-私は一瞬たりともそんなことを信じないのだが-この全イギリス本土
あるいは大部分が敵の手に落ち、国民が飢えに苦しむようなことがあっても、我々は
海外の我が大英帝国の領土において我がイギリス戦隊に護衛されつつ、戦闘を続ける
だろう。 そしてついには、神の御心にかなった日に、海の彼方の新世界(アメリカ)が
その全軍事力と全軍隊を投じて、この旧世界を救い出し、解放するためにやってくるだろう。
                                 ウインストン・チーチャル