ソースレビューで見つけたおもしろいコード

Flex+Java開発のプロジェクトが3月末で無事終了し、VB.NET開発のプロジェクトにアサインされたのも束の間、急遽C++開発のプロジェクト支援(いわゆるトラブル対応)に回されました。
与えられた作業はソースレビューとちょっとした実装。今日はソースレビューをしてきました。
少し見た限りでは設計書も細かく書かれていて、それに沿ってソースも書かれているのですが、トラブってるのもあってかちょっとしたケアレスミスが原因でバグを作り込んでいて残念な限り。


実際に見つけたバグを以下に書いてみます。

ループ変数がインクリメントされてない

最初見たとき、思わず「えっ」と言ってしまいました。

for (i = 0; i < 10; i) {
   //...
}

条件が逆

一部あってて一部間違ってるからたち悪い。

// nFlg1 <> 0 かつ nFlg2 = 0 かつ nFlg3 = 0の場合
if (nFlg1 != 0 && nFlg2 != 0 && nFlg3 != 0) {
   //...
}

絶対に入らないループ

残念な感じ。

int i = 0;
int nRet = 255;

for (i = 0; ((i < 10000) && (nRet == 0)); i++) {
   nRet = func();
   //
}

ループの中でカウンタ初期化

とっても残念な感じ。

void hoge() {
    // ...
    for (i = 0; i < 10000; i++) {
       fuga();
    }
}

void fuga() {
    int nCnt = 0;

    if (...) {
        nCnt++;
    }
    if (nCnt >= 1000) {
        //カウンタが1000以上になったときの処理
    }
}