我正在编写一个应该解决类似Sudoko的难题的程序,Hashiwokakero。我有一些看起来像这样的代码:
if (bridgesLeft[row][col] == 1)
{
doSomething();
}
else if (bridgesLeft[row][col] == 2)
{
doSomethingElse();
}
else if (bridgesLeft[row][col] == 3)
{
doAnotherThing();
}
...
我意识到我在doSomethingElse()
函数中添加了一个错误,所以我添加else if (bridgesLeft[row][col] == 2 && false)
而不是删除该块,以保证错误的函数不会运行,只是为了确保它是我的bug来自哪里。 Xcode给了我一个警告,说我的doSomethingElse()
代码永远不会运行。它也给了我这个选择:
fix-it: Silence by adding parentheses to mark code as explicitly dead.
点击此按钮更改
else if (bridgesLeft[row][col] == 2 && false)
到
else if (bridgesLeft[row][col] == /* DISABLES CODE */ (2) && false)
'2'周围的括号如何将此代码标记为明确死亡?这是什么意思?如果我留下括号,但取出&& false
部分,代码块仍然执行,所以它实际上并没有使代码死亡。
答案 0 :(得分:4)
这并不能解决这个问题,因为告诉clang代码是死的,我们可以通过阅读Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((0))来看到这个问题:
日志:改进-Wunreachable-code以提供指示代码的方法 故意通过if((0))标记死亡。
从-Wharentheses中提示,使用额外的'()'作为一个sigil,一个 死亡状况故意死亡。例如:
if ((0)) { dead }
找到此符号后,请勿发出死码警告。当。。。的时候 分析看到:
if (0)
它建议插入'()'作为修复它。
据我所知,它只是在()
中寻找整数文字,在您的情况下,(2)
适合这种情况并使警告静音。