我有一个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
的断言避免除以零,而这又是什么?
答案 0 :(得分:3)
断言最常用于开发期间。构建最终版本时,禁用断言。
话虽如此,断言是为了捕获应由开发人员纠正/检查的逻辑错误。它们不用作程序逻辑的实际验证。
这解释了为什么你仍然必须添加一个if语句来检查你的变量是否大于0.你的分析器会分析你的代码并且很可能忽略断言,因为你应该在最终构建过程中删除它们。