Skip to main content

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

Beispiel 84. Beispiel
{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:

  • sa_icon_message.png SA0077: Unstimmigkeit des Enum-Typs mit CASE-Ausdruck