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)
适合这种情况并保持沉默警告。
我正在编写一个程序来解决类似数独的谜题 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)
适合这种情况并保持沉默警告。