酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Xcode 4.4からぶら下がりelseがワーニング扱いになりました

自分で読めないコードは書かない信念(というほど立派なものではありませんが)あり、今まで遭遇することはありませんでした。

とあるライブラリを使用したときにえらい勢いでワーニングが発生しており、調べたところXcode 4.4になってから「ぶら下がりelse(dangling-else problem)」がワーニング扱いになったようです。

以下のような文言のワーニングが発生しています。

Add explicit braces to avoid dangling else

以下のようなサンプルコードはぶら下がりelseと呼ばれる状態になっています。if ((hoge / 3) == 131)の文にif (hoge % 3)の文がぶら下がっており、更にelse文が続いています。これがNGです。

// !!!ワーニング

    int hoge = 393;
    if ((hoge / 3) == 131)
        if (hoge % 3)
            hoge = 393;
        else
            hoge = 22;

elseがぶら下がっていなければ、ワーニングが発生することはありません。以下のサンプルコードの場合else文に続いていないため、ワーニング扱いにはなりません。

// セーフ。問題なし

    int hoge = 393;
    if ((hoge / 3) == 131)
        if (hoge % 3)
            hoge = 393;    


一番最初のif文にカッコにつけることでワーニングを回避することが可能です。

// セーフ。問題なし

    int hoge = 393;
    if ((hoge / 3) == 131) {
        if (hoge % 3)
            hoge = 393;
        else
            hoge = 22;
    }