Rileva l'uso di risultati temporanei nelle istruzioni con un tipo di dati inferiore alla dimensione del registro. Il cast implicito in questo caso può portare a risultati indesiderati.
Giustificazione: Per motivi di prestazioni, CODESYS esegue le operazioni sulla larghezza del registro del processore. I risultati intermedi
non vengono troncati. Questo può portare a interpretazioni errate, come nel caso seguente:
usintTest := 0; xError := usintTest - 1 <> 255;. In CODESYS, xError è TRUE in questo caso perché l'operazione usintTest - 1 viene tipicamente eseguita come un'operazione a 32 bit e il risultato non viene convertito
in byte. Quindi il valore 16#ffffffff (non uguale a 255) si trova nel registro di sistema. Per evitarlo, è necessario eseguire
il cast del risultato intermedio in modo esplicito: xError := TO_USINT(usintTest - 1) <> 255;




AVVISO

Se questo messaggio è attivato, verranno segnalati molti punti meno problematici del codice. Sebbene il problema si verifichi solo quando l'operazione produce un overflow o un underflow nel tipo di dati, l'analisi statica non può distinguere tra le singole posizioni.
Se si include un typecast esplicito in tutte le posizioni segnalate, il codice sarà molto più lento e meno leggibile.
Importanza: Basso
Esempio
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)