如何在新的xCode中禁用"添加显式括号以避免悬空"?

Dav*_*vid 12 syntax xcode warnings compiler-warnings

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

顺便说一下,我正在使用xcode4.41,但显然我没有足够的声誉来创建一个新的标签(虽然4.41尚未存在,但很有趣)

Pat*_*Fog 21

这对我有用:

#ifdef __llvm__
#pragma GCC diagnostic ignored "-Wdangling-else"
#endif
Run Code Online (Sandbox Code Playgroud)


小智 5

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

if (Condition1)
    if (Condition2)
        return Statement2;
    else if (Condition3)
        Statement3;
    else
        Statement4;
Run Code Online (Sandbox Code Playgroud)

通过查看上面的代码,解析器难以理解'else'与哪个'if'相关联?请记住,对于其他所有内容都不是必须的 - 如果,那么很可能else语句可能链接到if(Condition1)而不是if(Condition2).

Apple llvm Compiler非常聪明,不会让这种愚蠢行为,但会警告用户重新考虑代码,以确保用户不想要其他方式.

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

if (Condition1)
{
    if (Condition2)
        return Statement2;
    else if (Condition3)
        Statement3;
    else
        Statement4;
}
Run Code Online (Sandbox Code Playgroud)

  • 不,它不会让解析器混淆.else指的是_last_ if语句.@Eve"糟糕的格式化风格"是主观的. (6认同)