检测循环/if括号后的分号

Detecting semicolon after loop/if brackets

本文关键字:循环 if 检测      更新时间:2023-10-16

在GCC中是否有任何标志(如clang中的-Wempty-body),可以帮助我检测while/for循环大括号后的分号?有时候,人类很难发现这些简单的错误。

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]

try

$gcc -Wempty-body foo.c

这里明显的答案是"用clang++编译你的代码"(尽管我的x86-64的2.9版本似乎没有抓住这个特殊的问题,就像gcc 4.6.3没有抓住它一样-所以我不完全相信这个问题的原始前提是有效的)。

这个特殊的代码可以避免这个问题,通过使用这种形式,通过在for循环之后给出一个使用i的错误:

for(int i = ...) 
不是

int i;
for(i = ...)

当然,如果你想让i在循环结束后有一个值,那就行不通了。

是的,这是一个非常恼人的错误-我花了几个小时盯着屏幕寻找这种错误-有时你立即发现它!)