Ausdrücke in ST
Ein Ausdruck ist ein Sprachkonstrukt, das aus einer definierten Kombination von Operanden (z.B. →Literale, →Variablen, →Aufrufe) und Operatoren (z.B. +, -, *, /) besteht und einen Wert eines bestimmten Datentyps ergibt.
logi.CAD 3 wendet die folgenden Regeln zur Auswertung von Ausdrücken an:
Die Rangfolge des Operators bestimmt die Reihenfolge, in der die Operationen angewendet werden: Der Operator mit der höchsten Rangfolge in einem Ausdruck wird zuerst angewendet, dann der mit der nächst-niedrigeren Rangfolge usw., bis der Ausdruck ausgewertet ist. Bei gleichwertigen Operatoren wird von links nach rechts ausgewertet.
Beispiel: Falls A, B, C die INT-Werte 1, 2 bzw. 4 haben, wird der Ausdruck A+B-C*(C / B) so ausgewertet:Die Klammerung (C / B) wird aufgrund der höchsten Rangfolge zuerst ausgewertet: Sie entspricht (4 / 2) und liefert den Wert 2.
Die Multiplikation C*(2) wird aufgrund der nächst-niedrigeren Rangfolge ausgewertet: Sie entspricht 4*(2) und liefert den Wert 8.
Die Addition A+B und Subtraktion B-8 sind gleichwertige Operatoren. Da die Addition links von der Subtraktion steht, wird zuerst die Addition angewendet. Die Addition entspricht 1+2 und liefert den Wert 3.
Zuletzt wird die Subtraktion 3-8 angewendet: Somit hat der Ausdruck den Wert -5 als Ergebnis und wird implizit auf den Datentyp INT typisiert.
Falls ein Ausdruck zwei Operanden enthält, wird der ganz linke Operand zuerst ausgewertet.
Beispiel: Für den Ausdruck EQ(A,B)=AND(A,B) wird der Aufruf des EQ-Bausteins EQ(A,B) zuerst ausgewertet, dann der Aufruf des AND-Baustein AND(A,B) und zuletzt wird die Gleichheits-Operation (aufgrund Operator =) ausgewertet.→Boolesche Ausdrücke werden nur so weit ausgewertet, wie dies für die Auswertung des Ergebnisses inkl. evtl. Nebeneffekte erforderlich ist.
Beispiel: Sofern A<=B, ist für den Ausdruck (A>B)&(C<D) die Auswertung von (A>B) bereits ausreichend, damit feststeht, dass das Ergebnis des Ausdrucks der Wert FALSE (oder eine Entsprechung) ist.Ausdrücke ohne einen konkreten Datentyp werden typisiert. Erläuterungen dazu finden Sie unter "Typisierung von Ausdrücken".
Keine Erkennung von mathematischen Fehlern
Falls Sie Ausdrücke in logi.CAD 3 zuweisen, ist es möglich, dass mathematische Fehler nicht erkannt und gemeldet werden.
Var1 :=
0
**
0
=
1
Var2 :=
0
/
0
=
1
Var3 :=
0
MOD
0
=
1
Zusätzliche Information: Werden →konstante Ausdrücke bei der Initialisierung von Variablen verwendet, werden keine Fehler mehr erkannt.
Abhilfe: Prüfen Sie mit geeigneten Werkzeugen, ob der angegebene Ausdruck mathematisch ausgewertet werden kann.
Vermeiden Sie die Verwendung von Ausdrücken mit über 20 Operanden/Operatoren, um erhebliche Performance-Einbußen beim Speichern oder beim Importieren zu vermeiden. Lesen Sie den Troubleshooting-Artikel "C/C++ Indexer wird nicht abgeschlossen und verhindert das Speichern oder Importieren eines Objekts" für Details.