Visual C++ C4723 警告描述中的“电位被零除”是什么意思?

问题描述 投票:0回答:4

当我在 Visual C++ 10 中编译以下代码时

int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
    int len = strlen( "" );
    if( len / 0 ) {
        rand();
    }
}

编译器发出 C4723 警告 电位被零除

这里的潜力是什么意思?我的C++代码清楚地写着“将

len
除以零”,除以如何?

http://msdn.microsoft.com/en-us/library/8kd039eh.aspx

c++ visual-c++ compiler-warnings
4个回答
15
投票

MSDN 文章清楚地表明,编译器在编译时已将操作数评估为零。所以

potential
这里意味着编译器只不确定一件事 - 这段代码是否会被执行。


4
投票

意思是一样的,只是出于礼貌而已。
你想让它说“你正在除以零吗,白痴!” ? (-`


3
投票

编译器并不假设执行路径会到达除以 0 的位置。 这是一个合理的假设,因为 _tmain 的执行是在编译之后决定的。


2
投票
假设您是一名编译器开发人员,并且您创建了一个要在编译期间运行的静态分析工具,以帮助捕获错误。

例如,这里是一个基于范围的引擎,它将确定

/

 的右侧运算符可能采用的可能值。

现在有两种情况:

    右边肯定是0
  • 右边可能是0
显然,区分这两种情况需要付出更多努力。

因此,您可能会正确地假设最常见的错误原因是“可能性”,而不是“确定性”(头脑正常的 nodoby 会除以 0,对吧?),这样可以节省一些工作。

这是最佳的吗?对于开发者来说也许,对于用户来说则不然。

  • 可以用吗?绝对是。

© www.soinside.com 2019 - 2024. All rights reserved.