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。您的分析器分析您的代码并且很可能会忽略断言,因为您应该在最终构建期间删除它们。
我有一个 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。您的分析器分析您的代码并且很可能会忽略断言,因为您应该在最终构建期间删除它们。