SA0095: Koşullardaki atamalarPermalink

‎IF‎, ‎CASE‎ veya ‎REPEAT‎ yapılarının koşullarındaki atamaları tespit eder

Gerekçe: Bir atama (:=) ve bir karşılaştırma (=) kolayca karıştırılabilir. Sonuç olarak, bir koşuldaki bir atama kolayca kasıtsız olabilir ve bu nedenle rapor edilir. Bu, kodu okuyan kişinin de kafasını karıştırabilir.

Önemliymiş: Yüksek

Örnek

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: '...'