试图尽可能简化情况。所以我有一堂课:

class C
{
    int * field;
public:
    C() : field(nullptr) {}
    void init(int* f) { field = f; }

    int getI1() { return *field; }
    int getI2() { return *field; }
};


生成2个Lint警告613(可能使用空指针'C :: i'...)

我知道调用getI1()或getI2()时“字段”不会为空。不幸的是,我无法在构造函数中对其进行初始化。因此,我想禁止棉绒警告。我可以这样

class C
{
    int * field;
public:
    C() : field(nullptr) {}
    void init(int* f) { field = f; }

    int getI1() { return *field; } //lint !e613
    int getI2() { return *field; } //lint !e613
};


但在我的真实情况下:

1)这样的班级很多,每个班级都有很多
    使用此指针的函数。

2)我的管理人员不允许我添加太多皮棉
    代码中的注释。

所以我的问题是:有谁知道一个命令行选项,该选项可以让我告诉Lint:“我知道代码不是最好的,只是停止检查此特定成员变量是否为null”?

类似于-sem参数,也许吗?

最佳答案

所以我的问题是:有谁知道一个命令行选项,该选项可以让我告诉Lint:“我知道代码不是最好的,只是停止检查此特定成员变量是否为null”?


那是处理它的错误方法(即使我知道这样的命令行参数)。

PC-Lint就此正确警告您

int getI1() { return *i; } //lint !e613
int getI2() { return *i; } //lint !e613


可能会无意中取消引用nullptr

只是试图抑制衰落并不是一个好主意,因为init()函数的调用不是强制性的。

摆脱它的正确方法是添加一个明确的检查,例如

int getI1() {
    if(i) {
        return *i;
    }
    throw std::runtime_error("i wasn't initialized properly.");
}





  1)有很多这样的类,每个类都有许多使用此指针的函数。


除了跋涉并重构不良代码外,别无其他方法。


  2)我的管理人员不允许我在代码中添加太多皮棉注释。


那是个好政策。他们出于某些原因花了钱来安装SCA工具,并希望对代码进行改进。
如果这与您有空的时间相冲突,请他们建立一项任务来完成该任务。



如果您只想专注于PC-Lint报告的其他(更重要的内容),请使用grep或类似工具过滤掉不想看到的ATM。但是不要建立命令行参数来完全抑制它们。那将是永远被遗忘的事情,以后再也不会被触摸或接近。



1个
抑制SCA工具(如PC-Lint)发出的任何错误或警告都会破坏其全部目的,除非您完全确定该工具会给您带来误报。否则,您的公司可以简单地节省花在购买许可证上的钱,并遵循不良的编码习惯。

关于c++ - PC Lint,如何使用init()抑制类的错误613(可能使用空指针),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45287883/

10-11 22:46
查看更多