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_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
Uscita in Messaggi vista:
SA0077: Tipo non corrispondente con l'espressione CASE