Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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++ 使用cppcheck的棘手情况_C++_Cppcheck - Fatal编程技术网

C++ 使用cppcheck的棘手情况

C++ 使用cppcheck的棘手情况,c++,cppcheck,C++,Cppcheck,我面临的情况是我需要通过CPP考试,但有时会变得棘手。在这种情况下你通常做什么? 比如说 #include<iostream> using namespace std; void fun1(); int fun2(); int main() { fun1(); } void fun1() { int retVal; if (-1 == (retVal = fun2())) { cout

我面临的情况是我需要通过CPP考试,但有时会变得棘手。在这种情况下你通常做什么? 比如说

#include<iostream>
using namespace std;
void fun1();
int fun2();
int main()
{
        fun1();
}

void fun1()
{
        int retVal;
        if (-1 == (retVal = fun2()))
        {
                cout <<"Failure. fun2 returned a -1"<< endl;
        }
}

int fun2()
{
        return -1;
}
我们通常会看到上面这样的代码。上述文件的cppcheck将给出如下输出-

cppcheck-抑制=冗余分配 -启用class='warning,style,performance,portability'-inlinesuppr-language='c++'retval\u neverused.cpp检查retval\u neverused.cpp。。。[retval\u neverused.cpp:13]:样式变量'retval'被分配了一个 从未使用过的值


我不想仅仅为了检查而添加一些虚线打印retVal。事实上,在这种情况下,我会抛出一个异常,我不希望该异常中包含诸如retVal值之类的琐碎内容。

CppCheck是正确的。你根本不需要回复。直接检查fun2的返回值:if-1==fun2

另一方面,在条件表达式中指定变量是非常糟糕的做法。如果您打算键入==但实际上键入=,则很难发现输入错误。

您可以重写为:

const int retval = fun2();
if (retval == -1)
IMHO,这种技术更容易调试,因为在执行if语句之前,通过调试器可以看到fun2返回的值


如果要查看函数的返回值,在if表达式中调试函数调用会稍微复杂一些。

一种常见的方法是使用如下内容:

#define OK_UNUSED(x) (void)x


void fun1()
{
        int retVal;
        if (-1 == (retVal = fun2()))
        {
                OK_UNUSED (retVal);
                cout <<"Failure. fun2 returned a -1"<< endl;
        }
}

我没有得到Q值。在赋值之后,您不会使用retVal,因此诊断是正确的。现在您可以将代码重写为void fun1{if-1==fun2{cout
#define OK_UNUSED(x) if(false && (x)) ; else (void) 0