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_TYPEPROGRAM 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_CASEAusgabe unter Ansicht Meldungen:
SA0077: Unstimmigkeit des Enum-Typs mit CASE-Ausdruck