我有以下代码,它正常工作:
int result = ERRORCODE_OK;
if (dataObj == NULL || dataObj->inputSignal == NULL)
{
result = ERRORCODE_MISSING_DATAOBJ;
}
if (result == ERRORCODE_OK && dataObj->spectrum == NULL) // CPP-Check error
{
result = Calculate(dataObj->inputSignal, .. );
}
return result;
Run Code Online (Sandbox Code Playgroud)
但是CppCheck给了我以下错误:
可能的空指针取消引用:
dataObj- 否则检查空值是多余的.
我不明白为什么.如果dataobj是NULL,那么结果将是其他的东西ERRORCODE_OK.
如果第一个条件成功,CppCheck不会检查到你的第二个条件是否会被完全评估:
int result = ERRORCODE_OK;
if (dataObj == NULL || dataObj->inputSignal == NULL)
result = ERRORCODE_MISSING_DATAOBJ;
// Here, you can see that either dataObj!=NULL or result!=ERRORCODE_OK.
// But CppCheck can't!
if (result == ERRORCODE_OK && dataObj->spectrum == NULL)
result = Calculate(dataObj->inputSignal, .. );
return result;
Run Code Online (Sandbox Code Playgroud)
安抚检查员的三种替代方法是自己出现.首先,只需重复dataObj第二次非空的检查if.其次,将第二个if改为else if:
int result = ERRORCODE_OK;
if (dataObj == NULL || dataObj->inputSignal == NULL)
{
result = ERRORCODE_MISSING_DATAOBJ;
}
else if (result == ERRORCODE_OK && dataObj->spectrum == NULL)
{
result = Calculate(dataObj->inputSignal, .. );
}
return result;
Run Code Online (Sandbox Code Playgroud)
第三,一旦发现其中一个错误情况,立即返回:
if (!dataObj || !dataObj->inputSignal)
return ERRORCODE_MISSING_DATAOBJ;
if (dataObj->spectrum)
return ERRORCODE_OK;
return Calculate(dataObj->inputSignal, .. );
Run Code Online (Sandbox Code Playgroud)