12

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

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

4

5 回答 5

21

这对我有用:

#ifdef __llvm__
#pragma GCC diagnostic ignored "-Wdangling-else"
#endif
于 2012-08-23T19:34:05.310 回答
6

它不是一个错误。如果您有嵌套的 if-else if-else 块,Apple LLVM 会向您发出警告。看下面的代码:

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

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

Apple llvm 编译器足够聪明,不会使这种愚蠢行为变得愚蠢,但会警告用户重新考虑代码,以确保用户不想要它。

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

if (Condition1)
{
    if (Condition2)
        return Statement2;
    else if (Condition3)
        Statement3;
    else
        Statement4;
}
于 2013-10-21T08:41:53.323 回答
3

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

缺少大括号和括号

将其设置为 NO 可以消除此警告。

不幸的是,似乎没有办法摆脱大括号警告。

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

于 2012-08-19T02:05:12.600 回答
0

用于“其他”“如果”的“其他”是一个很难找到的错误!我从个人经验中知道。所以,“悬空的”警告真的很有帮助。

于 2016-09-20T09:09:01.953 回答
0

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

http://clang.llvm.org/docs/UsersManual.html#options-to-control-error-and-warning-messages

-Wno-foo
        禁用警告“foo”。

clang++ -Wno-dangling-else test.cpp
于 2016-12-13T20:03:46.323 回答