6

GCC 中是否有任何标志(如-Wempty-bodyclang),可以帮助我检测 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 statements”之后找到这些错误。

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++ 编译你的代码”(尽管我的 x86-64 的 2.9 版本似乎没有发现这个特殊问题,就像 gcc 4.6.3 没有发现它一样 - 所以我并不完全相信问题的原始前提是有效的)。

此特定代码可以通过使用表单来避免此问题,方法是在-loop 本身i之后给出使用错误:for

for(int i = ...) 

代替

int i;
for(i = ...)

i当然,如果您想在循环后获得一个值,这将不起作用。

[是的,这是一个非常烦人的错误——有时我花了几个小时盯着屏幕才发现这种错误——其他时候你会立即发现它!]

于 2013-06-15T22:56:28.530 回答