有没有办法让gcc或clang警告失踪的'其他'?

时间:2012-01-24 06:41:36

标签: c++ gcc syntax clang gcc-warning

如果我没有处理每个 if 语句的 else 条件,我想让编译器发出警告。这是否存在于 clang gcc

为了澄清,我并没有尝试将所有源代码放在上面。但是,有时整个文件或大量的代码,我根本无法承受不考虑每一个其他块的设计。因此,我想,我真的在寻找一个pragma,我可以打开和关闭以启用和禁用几千行非常重要的代码。

将其设想为自动代码审查或静态分析工具。

要说编译器不能这样做,因为它是合法的......在实践中不是问题。我见过的每个C / C ++编译器都会很乐意发出大量警告,以防止在语法和语义上完全有效的代码。 (例如在gcc中,-Wunused-value,-Wunused-label,-Wunreachable-code等...)

3 个答案:

答案 0 :(得分:8)

如果确实想要这个,我建议您下载Cppcheck并为此添加支票。 Cppcheck执行简单的基于文本的匹配以检查规则集。警告缺少else条款是合理的直截了当。

我在missing-else分支中实现了“遗漏其他”的原型检查:https://github.com/ghewgill/cppcheck/tree/missing-else。由于新的意外风格警告(在其他合法代码上),它通过了自己的测试,但未通过许多其他测试。

答案 1 :(得分:3)

编译器根本不能,简单的if()是有效的条件语句 编译器警告可能存在语义错误,它们并不意味着拥有/提供调试功能 要获得这些功能,您将不得不依赖一些专门为此目的而制作的代码分析工具。

答案 2 :(得分:0)

我担心这样的支票会引发一大堆警告,因为很多代码都没有使用else条款。但是,如果您只是想检查代码,可以使用这些小宏:

#define IF
#define THEN ?
#define ELSE :    

然后你就像这样编写你的代码:

int foo(bool flag)
{
    return IF(flag) THEN 0 ELSE -1;
}

当然这是一个坏主意。