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.