Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Pc Lint,如何抑制带有init()的类的err 613(可能使用null ponter)_C++_Nullptr_Pc Lint - Fatal编程技术网

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