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
{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_CASESalida en el Mensajes vista:
SA0077: El tipo no coincide con la expresión CASE