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; }
3 Réponses :
CPPCheck est un peu bon cependant. Vous n'avez pas besoin de retval du tout. Vérifiez simplement la valeur de retour de 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 FUN2 code> directement:
si (-1 == fun2 ()) code> p> p>
== code> mais en fait dactylographié
= p>. P>. P>.
Vous pouvez réécrire comme suit:
const int retval = fun2(); if (retval == -1)
Un moyen courant est avec quelque chose comme ceci: ceci indique aux humains que 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: p> retval code> est intentionnellement inutilisé et fait que le CPPCheck pense qu'il est utilisé, supprimant l'avertissement. p>
Je ne reçois pas le Q. Vous n'utilisez pas
retval code> 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; }} code>