Xcode C 代码,"division by zero" 分析器问题

Xcode C code, "division by zero" analyzer issue

我有一个 C 文件,在函数中包含以下代码片段:

assert( pCache->nHash>0 && pCache->apHash );
...
if( pPage ){
    unsigned int h = iKey % pCache->nHash; 
...

当我 运行 分析时,Xcode 在包含模运算的最后一行抛出逻辑错误 - 除以零。

如果我像这样向 if 添加额外的检查,错误就会消失:

if( pPage && pCache->nHash>0 ){

包含 pCache->nHash>0 的断言不应该避免被零除吗?

断言仅在开发期间最常使用。当您构建最终版本时,您会禁用断言。

话虽如此,断言是用来捕获应该由开发人员 corrected/checked 处理的逻辑错误的。它们不用作程序逻辑的实际验证。

这解释了为什么您仍然必须添加一个 if 语句来检查您的变量是否大于 0。您的分析器分析您的代码并且很可能会忽略断言,因为您应该在最终构建期间删除它们。