C++ Pc Lint,如何抑制带有init()的类的err 613(可能使用null ponter)
尽量简化情况。所以我有一门课:C++ Pc Lint,如何抑制带有init()的类的err 613(可能使用null ponter),c++,nullptr,pc-lint,C++,Nullptr,Pc Lint,尽量简化情况。所以我有一门课: 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()时,“fie
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()时,“field”不会为null。不幸的是,我不能在构造函数中初始化它。因此,我想抑制Lint警告。我可以这样做
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
的引用
仅仅试图抑制1这种衰减不是一个好主意,因为调用init()
函数不是必需的
消除它的正确方法是添加一个显式检查,如
int getI1() {
if(i) {
return *i;
}
throw std::runtime_error("i wasn't initialized properly.");
}
1) 有相当多的此类类,每个类都有许多使用此指针的函数 没有别的办法,只能费力地浏览它们并重构那些糟糕的代码 2) 我的管理层不允许我在代码中添加太多的lint注释 这是个好政策。出于种种原因,他们花钱安装SCA工具,并希望代码得到改进。
如果这与你的可用时间冲突,请他们制定一项任务,让你完成这项任务
如果您只想专注于PC Lint报告的其他(更重要的内容),请使用
grep
或类似工具筛选出您不想看到的内容。但不要建立命令行参数来完全抑制它们。这些东西将永远被遗忘,以后再也不会被触及或接近
一, 抑制由SCA工具(如PC Lint)发出的任何错误或警告都会破坏它的全部用途,除非您完全确定该工具会给您一个误报。否则,您的公司可以简单地节省用于许可证的费用,并坚持不好的编码习惯 所以我的问题是:有没有人知道一个命令行选项可以让我告诉Lint“我知道代码不是最好的,停止检查这个特定的成员变量是否为null就行了” 这是错误的处理方法(即使我知道这样的命令行参数) PC Lint正确地警告您这一点
int getI1() { return *i; } //lint !e613
int getI2() { return *i; } //lint !e613
可能会无意中取消对nullptr
的引用
仅仅试图抑制1这种衰减不是一个好主意,因为调用init()
函数不是必需的
消除它的正确方法是添加一个显式检查,如
int getI1() {
if(i) {
return *i;
}
throw std::runtime_error("i wasn't initialized properly.");
}
1) 有相当多的此类类,每个类都有许多使用此指针的函数 没有别的办法,只能费力地浏览它们并重构那些糟糕的代码 2) 我的管理层不允许我在代码中添加太多的lint注释 这是个好政策。出于种种原因,他们花钱安装SCA工具,并希望代码得到改进。
如果这与你的可用时间冲突,请他们制定一项任务,让你完成这项任务
如果您只想专注于PC Lint报告的其他(更重要的内容),请使用
grep
或类似工具筛选出您不想看到的内容。但不要建立命令行参数来完全抑制它们。这些东西将永远被遗忘,以后再也不会被触及或接近
一,
抑制由SCA工具(如PC Lint)发出的任何错误或警告都会破坏它的全部用途,除非您完全确定该工具会给您一个误报。否则,您的公司只需节省用于许可证的费用,并坚持不好的编码习惯。似乎在构造函数运行后,您有一个不可用的实例(如果调用getT1()或getT2(),该实例将崩溃)。那根本不是我喜欢的东西
最好有一个构造函数C(int*f)。问题消失了。在这种情况下,警告是完全正确的,并警告您错误代码,因此应该修复错误代码 似乎在构造函数运行之后,您有一个不可用的实例(如果调用getT1()或getT2(),实例将崩溃)。那根本不是我喜欢的东西
最好有一个构造函数C(int*f)。问题消失了。在这种情况下,警告是完全正确的,并警告您错误代码,因此应该修复错误代码 我知道代码不好,应该修复等等。不幸的是,我现在无法做到这一点(因为一个人付出了巨大的努力和高风险的变化),但这些错误压倒了其他问题,有时更为关键 我发现,要在一行中取消显示此警告,可以执行以下操作:
-esym(613, C::field)
我知道代码是坏的,应该被修复等等。不幸的是,我现在无法做到这一点(因为一个人付出了巨大的努力和高风险的变化),但这些错误压倒了其他问题,有时更为关键 我发现,要在一行中取消显示此警告,可以执行以下操作:
-esym(613, C::field)
为什么不重构这个类来摆脱
init
,让代码发生在构造函数中呢?这是我想做的第一件事。但不幸的是,在real co