Skip to main content

SA0077 : Type d'énumération non concordant avec CASE expression

Détecte les positions de code où une instruction CASE mélange des valeurs d'énumération avec des types non énumératifs.

Justification : Le mélange de valeurs d'énumération et de valeurs entières dans les constructions CASE constitue une violation de la sécurité des types de données, réduit la lisibilité du code et a un impact sur la maintenabilité. Les valeurs d'énumération garantissent la clarté sémantique. L'utilisation de valeurs entières brutes comporte le risque d'erreurs mineures et rend le code plus difficile à comprendre. Les modifications de type de données apportées aux énumérations peuvent également détruire des branches basées sur des entiers, ce qui

Importance : Faible

Exemple 84. Exemple
{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

Sortie dans le messages voir:

  • sa_icon_message.png SA0077 : Incompatibilités de type avec l'expression CASE