我正在编写一个程序,该程序旨在解决类似sudoko的谜题Hashiwokakero。我有一些代码看起来像这样:
if (bridgesLeft[row][col] == 1)
{
doSomething();
}
else if (bridgesLeft[row][col] == 2)
{
doSomethingElse();
}
else if (bridgesLeft[row][col] == 3)
{
doAnotherThing();
}
...
我意识到我在doSomethingElse()
函数中放了一个bug,所以我没有删除那个块,而是添加了else if (bridgesLeft[row][col] == 2 && false)
来保证这个bug函数不会运行,只是为了确保这就是我的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
部分,代码块仍然在执行,所以它实际上并没有使代码失效。
这并没有解决问题,而是通过告诉clang代码注定要死来消除警告,我们可以通过阅读Improve-Wunreachable代码来看到这一点,通过if((0))来提供一种指示代码被故意标记为死的方法,它说:
日志:改进-Wunreachable代码提供了一种指示代码的方法通过if((0))故意标记为dead。
从-W括号中得到提示,使用额外的"()"作为死亡状态是故意死亡的。例如:
if ((0)) { dead }
当发现此sigil时,不要发出死代码警告。当分析发现:
if (0)
它建议插入"()"作为"修复"。
据我所知,它只是在()
中寻找一个整数文本,在您的情况下,(2)
适合这种情况,并使警告静音。