001
04.07.2010, 14:19 Uhr
Hans
Library Walker (Operator)
|
Hi,
also Gegenbeispiele kenn ich keine, aber ich hätte Probleme damit, auch mittels Debugger darin einen Fehler zu finden wenn ich true erwarte und es kommt false heraus. Deshalb ziehe ich es vor, solche Ausdrücke zumindest in der Debug-version ungefähr so zu schreiben:
C++: |
x = ... ; hilf1 = a * a + b * b; hilf2 = c * c; hilf3 = bitmaske & (1 << 4) if ( (x == 42) || (hilf1 <= hilf2) && (hilf3) != 0) { printf ("Gewonnen!"); }
|
D.h. solche langen Ausdrücke weitestgehend zu vermeiden, bzw. die einzelnen Berechnungen vorher zu machen und nur noch deren Ergebnisse zu vergleichen.
Jetzt kann man natürlich einwenden, das man auf Assemblerebene debuggen kann, weil die Ausdrück da auch vorher berechnet werden. Stimmt, aber da kann vom Compiler auch schon jede Menge wegoptimiert worden sein, so das vom ursprünglichen Ausdruck nicht mehr viel übrig ist. (Ich hatte da schon den Fall, das der Compiler einen Ausdruck komplett selbst ausgewertet hat und nur noch das Ergebnis in ein Register geladen und anschliessend printf aufgerufen hat.) Ausserdem kann man nicht von jedem erwarten, Assembler zu können.
Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. |