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

    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.