SA0077: Unstimmigkeit des Enumerationstyps mit CASE-Ausdruck
Funktion | 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 Integer-basierte Verzweigungen unbemerkt zerstören. |
Wichtigkeit | Niedrig |
Beispiel:
Enumeration E_Sample:
TYPE E_Sample :
(
eNull,
eOne,
eTwo
) DWORD;
END_TYPE Programm MAIN:
PROGRAM MAIN
VAR
nDINT : DINT;
eSample : E_Sample;
bVar : BOOL;
END_VARnDINT := nDINT + DINT#1;
CASE nDINT OF
DINT#1:
bVar := FALSE;
E_Sample.eTwo: // => SA0077
bVar := TRUE;
ELSE
bVar := NOT bVar;
END_CASE
CASE eSample OF
DINT#1: // => SA0077
bVar := FALSE;
E_Sample.eTwo:
bVar := TRUE;
ELSE
bVar := NOT bVar;
END_CASE