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

时间:2015-03-20 22:20:59

标签: c++ xcode compiler-warnings dead-code

我正在编写一个应该解决类似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部分,代码块仍然执行,所以它实际上并没有使代码死亡。

1 个答案:

答案 0 :(得分:4)

这并不能解决这个问题,因为告诉clang代码是死的,我们可以通过阅读Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((0))来看到这个问题:

  

日志:改进-Wunreachable-code以提供指示代码的方法   故意通过if((0))标记死亡。

     

从-Wha​​rentheses中提示,使用额外的'()'作为一个sigil,一个   死亡状况故意死亡。例如:

if ((0)) { dead }
     

找到此符号后,请勿发出死码警告。当。。。的时候   分析看到:

if (0)
     

它建议插入'()'作为修复它。

据我所知,它只是在()中寻找整数文字,在您的情况下,(2)适合这种情况并使警告静音。