Skip to main content

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

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

  • sa_icon_message.png SA0077: Tipo non corrispondente con l'espressione CASE