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_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:
SA0077: El tipo no coincide con la expresión CASE