0
votes

Situations difficiles avec CPPCheck

Je suis confronté à une situation où j'ai besoin de CPPChecks à passer, mais cela devient parfois difficile. Que faites-vous généralement dans de telles circonstances? Par exemple.

#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;
}


1 commentaires

Je ne reçois pas le Q. Vous n'utilisez pas retval après avoir affecté une valeur afin que le diagnostic soit correct. Pour le moment, vous pouvez réécrire le code comme Void Fun1 () {if (-1 == Fun2 ()) {COUT << "échec. FUN2 retourné A -1" << endl; }}


3 Réponses :


6
votes

CPPCheck est un peu bon cependant. Vous n'avez pas besoin de retval du tout. Vérifiez simplement la valeur de retour de FUN2 directement: si (-1 == fun2 ())

Afrett, attribuer des variables à l'intérieur des expressions conditionnelles est vraiment une mauvaise pratique. Il en fait beaucoup plus difficile d'attraper des fautes de frappe où vous vouliez taper == mais en fait dactylographié = . . .


0 commentaires

4
votes

Vous pouvez réécrire comme suit:

const int retval = fun2();
if (retval == -1)


0 commentaires

2
votes

Un moyen courant est avec quelque chose comme ceci: xxx

ceci indique aux humains que retval est intentionnellement inutilisé et fait que le CPPCheck pense qu'il est utilisé, supprimant l'avertissement.

Notez que cette macro ne doit pas être utilisée si l'évaluation de son paramètre a des conséquences. Dans ce cas, vous avez besoin de quelque chose de favorable comme: xxx


0 commentaires