Artikel-ID: 000073768 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 14.09.2011

Falsche Ergebnisse aus logischen oder bedingten Operationen mit Nebenwirkungen

Umgebung

    Intel® Quartus® II Anmeldungs-Edition
BUILT IN - ARTICLE INTRO SECOND COMPONENT

Kritisches Problem

Beschreibung

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 );
Lösung

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.

Zugehörige Produkte

Dieser Artikel bezieht sich auf 1 Produkte

Intel® programmierbare Geräte

1

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.