2013-06-15 5 views
6

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

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であることの警告を印刷することで、このフラグ(-Wall -pedantic -Wempty-body)と(打ち鳴らすよりも便利です。

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

[gccの缶の可能重複正確に無用な条件をキャッチしますか?](http://stackoverflow.com/questions/851162/can-gcc-accurately-catch-useless-conditionals) –

+1

2番目の考えでは、それは重複ではない、謝罪します。しかし、 '-Wempty-body'もGCCフラグではありませんか? –

+6

これは 'if '/' for'/'while'などと同じ行に' {'を置くことは非常に良い理由(スタイル以外の理由)です。そして、同じ行に1つのライナー同じように。 – Kninnug

答えて

2

$ gccの-Wemptyボディのfoo.cを試してみてください

または

のgcc -c foo.cの-Wextra

+3

これはgcc/g ++ 4.7.2では動作しません(少なくとも私のコンピュータでは動作しません) – FDinoff

1

明白な答えはここにある「打ち鳴らすと、あなたのコードをコンパイル++」(x86-64のための私の2.9バージョンは、この特定の問題をキャッチしていないようですが、 gcc 4.6.3のようにそれを捕らえない - 私は完全に質問の元の前提が有効であると確信していない)。

for(int i = ...) 

代わりもちろん

int i; 
for(i = ...) 

のこと:この特定コード自体-loop foriを使用するため誤差を与えることによって、フォームを使用してこの問題を回避することができる

iにループの後に値を持たせたい場合には機能しません。

[はい、それは非常に迷惑なエラーだ - 私は時々、バグのこの種を見つけるために画面を見つめて数時間を費やしてきた! - あなたはすぐにそれを見つけ、他の回]

関連する問題