Kritisches Problem
Der C2H Compiler evaluiert immer beide Logischen
(&&, ||) und Bedingungen (?:)
Operatoren. Dies unterscheidet sich von den erwarteten American National Standards
Institut (ANSI) C-Verhalten, bei dem die Werte von links nach rechts bewertet werden,
und unnötige Ausfälle werden vermieden.
Zum Beispiel im Ausdruck (i-- && j--),
wenn der Wert i Null ist, wird ANSI C nicht evaluiert
die rechte Seite (RHS) Ausdruck, und j ist nicht
Verringert. Im Gegensatz dazu evaluiert der C2H Compiler beide Seiten,
Decrementing j.
Die folgenden Expressions sind andere Beispiele, die möglicherweise von diesem Problem betroffen:
if (i-- || j )
...;
a = ((cond == 1)? i : j );
Verwenden Sie logische und bedingte Operationen, deren Betreiber
keine Nebenwirkungen. Operationen mit Nebenwirkungen umfassen Vor- und Nachbearbeitung
Inkrements- und Decrement-Vorgänge ( , --),
Speicheroperationen (*, [], ., ->),
und Funktionsanrufe.