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: FallsA
,B
,C
dieINT
-Werte1
,2
bzw.4
haben, wird der AusdruckA+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 Wert2
. - Die Multiplikation
C*(2)
wird aufgrund der nächst-niedrigeren Rangfolge ausgewertet: Sie entspricht4*(2)
und liefert den Wert8
. - Die Addition
A+B
und SubtraktionB-8
sind gleichwertige Operatoren. Da die Addition links von der Subtraktion steht, wird zuerst die Addition angewendet. Die Addition entspricht1+2
und liefert den Wert3
. - Zuletzt wird die Subtraktion
3-8
angewendet: Somit hat der Ausdruck den Wert-5
als Ergebnis und wird implizit auf den DatentypINT
typisiert.
- Die Klammerung
- Falls ein Ausdruck zwei Operanden enthält, wird der ganz linke Operand zuerst ausgewertet.
Beispiel: Für den AusdruckEQ(A,B)=AND(A,B)
wird der Aufruf desEQ
-BausteinsEQ(A,B)
zuerst ausgewertet, dann der Aufruf desAND
-BausteinAND(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: SofernA<=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 WertFALSE
(oder eine Entsprechung) ist. - Ausdrücke ohne einen konkreten Datentyp werden typisiert. Erläuterungen dazu finden Sie unter "Typisierung von Ausdrücken".
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.