SA0095: Assegnazioni in condizioniPermalink

Rileva le assegnazioni in condizioni di costrutti ‎IF‎, ‎CASE‎ o ‎REPEAT‎

Giustificazione: Un'assegnazione (:=) e un confronto (=) possono essere facilmente confusi. Di conseguenza, un'assegnazione in una condizione può facilmente essere involontaria e viene quindi segnalata. Questo può anche confondere il lettore del codice.

Importanza: Alto

Esempio

PROGRAM PLC_PRG
VAR
	iCond1:INT := INT#1;
	iCond2:INT := INT#2;
	xCond:BOOL := FALSE;
	iVar : INT;
END_VAR

IF INT_TO_BOOL(iCond1 := iCond2) THEN					  // SA0095
	iCond1 := INT#1;
	iCond2 := INT#2;
ELSIF (iCond1 := 11) = 11 THEN							 // SA0095
	iCond1 := INT#1;
	iCond2 := INT#2;
END_IF

IF xCond := TRUE THEN									  // SA0095
	xCond := FALSE;
END_IF

IF (xCond := FALSE) OR (iCond1 := iCond2) = 12 THEN		// SA0095
	xCond := FALSE;
	iCond1 := INT#1;
	iCond2 := INT#2;
END_IF

IF (iVar := iVar + 1) = 120 THEN       					// SA0095 (can be valid, but is not reparable very well
iVar := 0;
END_IF

WHILE (xCond = TRUE) OR (iCond1 := iCond2) = 12 DO		 // SA0095
	xCond := FALSE;
END_WHILE

//Error: assignment in repeat loop
REPEAT 
	xCond := FALSE;
UNTIL
	(xCond = TRUE) OR (iCond1 := iCond2) = 12         	 //  SA0095
END_REPEAT

--> SA0095: Assignment in condition: '...'