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

Xcode offers strange solution for explicitly dead code in c++?

我正在编写一个程序来解决类似数独的谜题 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) 以保证错误函数不会 运行,只是为了确保那是我的错误的来源。 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-code to provide a means to indicate code is intentionally marked dead via if((0)) 看到这一点,上面写着:

Log: Improve -Wunreachable-code to provide a means to indicate code is intentionally marked dead via if((0)).

Taking a hint from -Wparentheses, use an extra '()' as a sigil that a dead condition is intentionally dead. For example:

if ((0)) { dead }

When this sigil is found, do not emit a dead code warning. When the analysis sees:

if (0)

it suggests inserting '()' as a Fix-It.

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