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
{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:
SA0077 : Incompatibilités de type avec l'expression CASE