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]:(警告)可能的空指针取消引用:数据

在你的代码中.. 听起来我们出于某种原因有漏报。