cppcheck检查C代码时不展开宏?
cppcheck does not expand macro when checking C code?
我有如下代码,我用cppcheck做静态分析。
我发现它不能报告数据的空指针。
#define MY_FREE(p) if(p) {free(p);(p)=NULL;}
for(i=0; i<10; i++)
{
ret = list_insert(list, data);
if (1 != ret)
{
MY_FREE(data);
}
other_process(data->item);
}
但是如果我直接扩展宏"MY_FREE",它就起作用了。
for(i=0; i<10; i++)
{
ret = list_insert(list, data);
if (1 != ret)
{
if(data) {free(data);(data)=NULL;};
}
other_process(data->item);
}
有什么配置可以解决吗?
我是一名 Cppcheck 开发人员。您测试的确切代码是什么? Cppcheck 警告此代码:
#define MY_FREE(p) if(p) {free(p);(p)=NULL;}
void f() {
struct Data *data;
for(i=0; i<10; i++)
{
ret = list_insert(list, data);
if (1 != ret)
{
MY_FREE(data);
}
other_process(data->item);
}
}
报告的警告:
[1.c:12]:(警告)可能的空指针取消引用:数据
在你的代码中.. 听起来我们出于某种原因有漏报。
我有如下代码,我用cppcheck做静态分析。 我发现它不能报告数据的空指针。
#define MY_FREE(p) if(p) {free(p);(p)=NULL;}
for(i=0; i<10; i++)
{
ret = list_insert(list, data);
if (1 != ret)
{
MY_FREE(data);
}
other_process(data->item);
}
但是如果我直接扩展宏"MY_FREE",它就起作用了。
for(i=0; i<10; i++)
{
ret = list_insert(list, data);
if (1 != ret)
{
if(data) {free(data);(data)=NULL;};
}
other_process(data->item);
}
有什么配置可以解决吗?
我是一名 Cppcheck 开发人员。您测试的确切代码是什么? Cppcheck 警告此代码:
#define MY_FREE(p) if(p) {free(p);(p)=NULL;}
void f() {
struct Data *data;
for(i=0; i<10; i++)
{
ret = list_insert(list, data);
if (1 != ret)
{
MY_FREE(data);
}
other_process(data->item);
}
}
报告的警告:
[1.c:12]:(警告)可能的空指针取消引用:数据
在你的代码中.. 听起来我们出于某种原因有漏报。