Detecta el uso de resultados temporales en sentencias con un tipo de datos inferior al tamaño del registro. El reparto implícito en este caso puede conducir a resultados no deseados.
Justificación: Por razones de rendimiento, CODESYS realiza operaciones en el ancho de registro del procesador. Los resultados intermedios
no se truncan. Esto puede dar lugar a interpretaciones erróneas como en el siguiente
caso: usintTest := 0; xError := usintTest - 1 <> 255;. En CODESYS, xError es TRUE en este caso porque la operación usintTest - 1 se ejecuta normalmente como una operación de 32 bits y el resultado no se convierte
al tamaño del byte. A continuación, el valor 16#ffffffff (no igual a 255) se encuentra en el registro. Para evitarlo, hay que lanzar el resultado
intermedio explícitamente: xError := TO_USINT(usintTest - 1) <> 255;




AVISO

Si se activa este mensaje, se informará de muchos lugares menos problemáticos del código. Aunque sólo puede producirse un problema cuando la operación produce un desbordamiento o un subdesbordamiento en el tipo de datos, el análisis estático no puede diferenciar entre las ubicaciones individuales.
Si incluye un typecast explícito en todas las ubicaciones indicadas, el código será mucho más lento y menos legible.
Importancia: Bajo
Ejemplo
PROGRAM PLC_PRG VAR byTest:BYTE; liTest:LINT; xError:BOOL; END_VAR //type size smaller than register size; byTest := 0; IF (byTest - 1) <> 255 THEN //use of temporary result + implicit casting -> SA0066 xError := TRUE; ELSE xError := FALSE; END_IF //type size equal to or bigger than register size; liTest := 0; IF (liTest - 1) <> -1 THEN // use of temporary result and no implicit casting -> OK xError := TRUE; ELSE xError := FALSE; END_IF --> SA0066: Use of temporary result: (byTest - USINT #1)