Skip to main content

SA0077: El tipo de enumeración no coincide con CASE expresión

Detecta las posiciones de código en las que un CASE la sentencia mezcla valores de enumeración con tipos que no son de enumeración.

Justificación: La combinación de valores de enumeración y valores enteros en las construcciones CASE infringe la seguridad de los tipos de datos, reduce la legibilidad del código y afecta a la capacidad de mantenimiento. Los valores de enumeración garantizan la claridad semántica. El uso de valores enteros sin procesar conlleva el riesgo de errores menores y hace que el código sea más difícil de entender. Los cambios de tipo de datos en las enumeraciones también pueden destruir las ramas basadas en números enteros, lo que puede.

Importancia: Baja

ejemplo 84. Ejemplo
{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

Salida en el Mensajes vista:

  • sa_icon_message.png SA0077: El tipo no coincide con la expresión CASE