SA0077: Unstimmigkeit des Enumerationstyps mit CASE
-Ausdruck
Erkennt Codepositionen, an denen eine CASE
-Anweisung Enumerationswerte mit Nicht-Enumerationstypen vermischt.
Begründung: Die Vermischung von Enumerationswerten und Integer-Werten in CASE-Konstrukten verletzt die Datentypsicherheit, verringert die Lesbarkeit des Codes und beeinträchtigt die Wartbarkeit. Enumerationswerte sorgen für semantische Klarheit. Die Verwendung von rohen Integer-Werten bergen das Risiko subtiler Fehler und machen den Code schwerer verständlich. Datentypänderungen an Enumerationen können außerdem integerbasierte Verzweigungen unbemerkt zerstören.
Wichtigkeit: Niedrig
{attribute 'qualified_only'} {attribute 'strict'} TYPE DUT_MyEnum : ( One := 1, Two := 2, Three := 3, Four := 4 ); END_TYPE
PROGRAM PRG_Case VAR diVar : DINT; xTemp : BOOL; eMyEnum : DUT_MyEnum; END_VAR
CASE diVar OF 1 : xTemp := FALSE; DUT_MyEnum.Two : // SA0077 xTemp := TRUE; ELSE xTemp := NOT xTemp; END_CASE CASE eMyEnum OF 1 : // SA0077 xTemp := FALSE; DUT_MyEnum.Two: xTemp := TRUE; ELSE xTemp := NOT xTemp; END_CASE
Ausgabe unter Ansicht Meldungen:
SA0077: Unstimmigkeit des Enum-Typs mit CASE-Ausdruck