试图尽可能简化情况。所以我有一堂课:
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/