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: '...'
Ayrıca bakınız