SA0095: Assignments in conditions
Function | Determines assignments in conditions of IF, CASE, WHILE or REPEAT constructs. |
Reason | An assignment (:=) and a comparison (=) can easily be confused. An assignment in a condition can therefore easily be unintentional and is therefore reported. This can also confuse readers of the code. |
Importance | High |
Samples:
PROGRAM MAIN
VAR
bTest : BOOL;
bResult : BOOL;
bValue : BOOL;
b1 : BOOL;
n1 : INT;
n2 : INT;
nCond1 : INT := INT#1;
nCond2 : INT := INT#2;
bCond : BOOL := FALSE;
nVar : INT;
eSample : E_Sample;
END_VAR// IF constructs
IF (bTest := TRUE) THEN // => SA0095
DoSomething();
END_IF
IF (bResult := F_Sample(bInput := bValue)) THEN // => SA0095
DoSomething();
END_IF
b1 := ((n1 := n2) = 99); // => SA0095
IF INT_TO_BOOL(nCond1 := nCond2) THEN // => SA0095
DoSomething();
ELSIF (nCond1 := 11) = 11 THEN // => SA0095
DoSomething();
END_IF
IF bCond := TRUE THEN // => SA0095
DoSomething();
END_IF
IF (bCond := FALSE) OR (nCond1 := nCond2) = 12 THEN // => SA0095
DoSomething();
END_IF
IF (nVar := nVar + 1) = 120 THEN // => SA0095
DoSomething();
END_IF
// CASE construct
CASE (eSample := E_Sample.eMember0) OF // => SA0095
E_Sample.eMember0:
DoSomething();
E_Sample.eMember1:
DoSomething();
END_CASE
// WHILE construct
WHILE (bCond = TRUE) OR (nCond1 := nCond2) = 12 DO // => SA0095
DoSomething();
END_WHILE
// REPEAT construct
REPEAT
DoSomething();
UNTIL
(bCond = TRUE) OR ((nCond1 := nCond2) = 12) // => SA0095
END_REPEAT