当我在 Visual C++ 10 中编译以下代码时
int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
int len = strlen( "" );
if( len / 0 ) {
rand();
}
}
编译器发出 C4723 警告 电位被零除。
这里的潜力是什么意思?我的C++代码清楚地写着“将
len
除以零”,除以势如何?
MSDN 文章清楚地表明,编译器在编译时已将操作数评估为零。所以
potential
这里意味着编译器只不确定一件事 - 这段代码是否会被执行。
意思是一样的,只是出于礼貌而已。
你想让它说“你正在除以零吗,白痴!” ? (-`
编译器并不假设执行路径会到达除以 0 的位置。 这是一个合理的假设,因为 _tmain 的执行是在编译之后决定的。
例如,这里是一个基于范围的引擎,它将确定
/
的右侧运算符可能采用的可能值。现在有两种情况:
因此,您可能会正确地假设最常见的错误原因是“可能性”,而不是“确定性”(头脑正常的 nodoby 会除以 0,对吧?),这样可以节省一些工作。
这是最佳的吗?对于开发者来说也许,对于用户来说则不然。