Xcode C代码,"除以零"分析仪问题

时间:2015-04-20 23:29:19

标签: c xcode clang static-analysis

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

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

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

如果我对if if添加额外的检查,则错误消失:

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

不应该包含pCache->nHash>0的断言避免除以零,而这又是什么?

1 个答案:

答案 0 :(得分:3)

断言最常用于开发期间。构建最终版本时,禁用断言。

话虽如此,断言是为了捕获应由开发人员纠正/检查的逻辑错误。它们不用作程序逻辑的实际验证。

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