Xcode为c++中显式死代码提供了一个奇怪的解决方案



我正在编写一个程序,该程序旨在解决类似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)适合这种情况,并使警告静音。

相关内容

  • 没有找到相关文章

最新更新