如何在新的 xCode 中禁用"Add explicit braces to avoid dangling else"?



刚刚更新到最新的xCode 4.41,现在我收到了大量关于完美代码的警告(请参阅主题行)。这些警告在我使用的第三方源代码中,我不想进入该代码并进行编辑(下次更新该代码时我必须再次进行编辑),所以我宁愿禁用该特定警告。

顺便说一句,我使用的是xcode4.41,但显然我没有足够好的声誉来创建一个新标签(虽然4.41还没有出现,但很有趣)

这对我有效:

#ifdef __llvm__
#pragma GCC diagnostic ignored "-Wdangling-else"
#endif

这不是一个bug。Apple LLVM在嵌套if-else-if-else块的情况下警告您。看看下面的代码:

if (Condition1)
    if (Condition2)
        return Statement2;
    else if (Condition3)
        Statement3;
    else
        Statement4;

通过查看上面的代码,解析器很难理解"else"与哪个"if"相连?请记住,对于每个else if都有一个else并不是强制性的,因此else语句很可能链接到if(Condition1)而不是if(Condition 2)。

Apple llvm编译器足够聪明,不会做出这种愚蠢的行为,但它警告用户重新考虑代码,以确保用户不希望以其他方式使用它。

通常,可以通过在所有顶级if语句中添加大括号来解决警告。在上面的示例中,通过在if(Condition1)中添加大括号可以消除警告。检查以下可读性更强(无警告)的代码:

if (Condition1)
{
    if (Condition2)
        return Statement2;
    else if (Condition3)
        Statement3;
    else
        Statement4;
}

OK---在Apple LLVM编译器4.0下有一个选项-警告称为

缺少大括号和括号

将其设置为"否"将消除此警告。

不幸的是,似乎没有办法摆脱牙套警告。

苹果,你开始对我的发展施加太多的压力了。停止

用于"other"if"的"else"是一个很难找到的bug!我从个人经历中知道。因此,"晃来晃去"的警告确实很有帮助。

您也可以使用-Wno-dangling-else标志。

http://clang.llvm.org/docs/UsersManual.html#options-控制错误和警告信息

-Wno foo
 nbsp nbsp nbsp 禁用警告"foo"。

clang++ -Wno-dangling-else test.cpp

相关内容

最新更新