2017-11-23 10 views
3

Ich mache ein C++ - Compilerprojekt, in dem ich Warnungen an Stellen kennzeichnen muss, an denen der Zuweisungsoperator statt des Vergleichsoperators falsch verwendet werden kann. .e.g während Vergleich in if Aussage zu tun, geben wir falsch Variable a als 10 manchmal zu überprüfen, ob (a = 10), die in if Anweisung führt immer true während ich nur, wenn a ist 10 wahr sein wollte. Einige der Fälle, die ich denken kann, sind:Orte, an denen der Zuweisungsoperator statt des Vergleichsoperators falsch verwendet werden kann, = Vs ==

  1. if(var = a), logisch sollte es if(var==a)
  2. while(var = a)
  3. for(;var=a;)
  4. do{}while(var=a)
  5. var=a? "some XYZ": "some ABC"

Können Sie mir bitte helfen sein mit den mehr Fällen, in denen dies Logischer Fehler kann auftreten, wo der Benutzer == verwenden sollte und versehentlich = wurde verwendet?

+2

Wie wäre es andersherum, wo Vergleich anstelle von Zuweisung verwendet wurde? Ich habe es ein paar Mal gesehen. –

+0

Was Ihr "Problem" betrifft, können einige Compiler dies erkennen und davor warnen. Und es gibt viele gute statische Analysewerkzeuge, die solche Probleme (und viele mehr) erkennen. –

+6

Ich würde meine Zeit damit nicht verschwenden, wenn ich du wäre. Manchmal * wollen * Sie eine Zuweisung als Schleife bedingt, wie in String-Kopier-Idiomen. Manchmal möchten Sie einen Vergleich, wenn Sie normalerweise eine Aufgabe schreiben. IMHO-Leute müssen nur den Unterschied haben, der ihnen eingetrichtert wird. – Bathsheba

Antwort

5

Ein hässlicher, den ich vor kurzem lief, war assert (a=b). Der Grund, der so besonders unangenehm ist, liegt darin, dass die Annahme in der Aussage besagt, dass die beiden bereits gleich sind, so dass die Aussage höchstwahrscheinlich harmlos ist. Aber wenn dies nicht der Fall ist, führt dies zu einer unangenehmen Debugging-Sitzung, da sich das Debug-Build funktional von dem Release-Build unterscheidet.

+1

Dieser ist pure böse –

+1

Nun, die Verwendung der Anweisung in 'assert' ist * immer * falsch. –

Verwandte Themen