SA0077: Mancata corrispondenza del tipo di enumerazione con CASE espressione
Rileva le posizioni del codice in cui un CASE l'istruzione mescola i valori di enumerazione con i tipi non di enumerazione.
Giustificazione: La combinazione di valori di enumerazione e valori interi nei costrutti CASE viola la sicurezza dei tipi di dati, riduce la leggibilità del codice e influisce sulla manutenibilità. I valori di enumerazione garantiscono la chiarezza semantica. L'uso di valori interi non elaborati comporta il rischio di errori minori e rende il codice più difficile da comprendere. Le modifiche al tipo di dati apportate alle enumerazioni possono inoltre distruggere i rami basati su numeri interi.
Importanza: Bassa
{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_CASEUscita in Messaggi vista:
SA0077: Tipo non corrispondente con l'espressione CASE