6

-Wempty-bodywhile/for ループのブレースの後のセミコロンを検出するのに役立つフラグが GCC に (clang のように) ありますか? 人間がこれらの単純な間違いを見つけるのは非常に難しい場合があります。

int i = 0;
for (i = 0; i < 10; ++i);
{
    cout << i << endl;
}

私は GCC 4.7.3 と clang 3.2-1~exp9ubuntu1 を使用しています。

編集済み:コンパイラが「if-elseステートメント」の後にこれらの間違いを見つけるのに役立つかどうかも確認します。

if (i == 0)
{
    cout << i << endl;
}
else;
{
    cout << i << endl;
}

興味深いのは、gcc が clang よりも役立つことです (このフラグ ( -Wall -pedantic -Wempty-body) を使用すると、警告が表示されます:

main.cpp:30:9: warning: suggest braces around empty body in an ‘else’ statement [-Wempty-body]
4

2 に答える 2

2

試す

$gcc -Wempty-body foo.c

また

gcc -Wextra -c foo.c

于 2013-06-15T19:31:30.240 に答える
1

ここでの明白な答えは「clang ++でコードをコンパイルする」です(ただし、gcc 4.6.3がキャッチしないのと同じように、x86-64用の私の2.9バージョンはこの特定の問題をキャッチしないようです-したがって、私は完全には確信していません質問の元の前提は有効です)。

この特定のコードは、フォームを使用して、 -loop 自体iの後に使用するためのエラーを与えることにより、この問題を回避できます。for

for(int i = ...) 

それ以外の

int i;
for(i = ...)

もちろん、iループの後に値が必要な場合は機能しません。

[はい、これは非常に迷惑なエラーです。この種のバグを見つけるために、数時間画面を見つめていましたが、すぐに見つかる場合もあります!]

于 2013-06-15T22:56:28.530 に答える