SA0041: Möglicherweise schleifeninvarianter Code
Funktion | Ermittelt Zuweisungen in (FOR-, WHILE-, REPEAT-) Schleifen, die bei jedem Schleifendurchlauf den gleichen Wert berechnen. Solche Codezeilen könnten außerhalb der Schleife eingefügt werden. |
Begründung | Dies ist eine Performance-Warnung. Code, der in einer Schleife ausgeführt wird, aber in jedem Schleifendurchlauf das Gleiche tut, kann außerhalb der Schleife durchgeführt werden. |
Wichtigkeit | Mittel |
Beispiel:
Im folgenden Beispiel wird SA0041 als Fehler/Warnung ausgegeben, da die Variablen nTest1 und nTest2 in der Schleife nicht verwendet werden.
PROGRAM MAIN
VAR CONSTANT
cMax : INT := 3;
END_VAR
VAR
nTest1 : INT := 5;
nTest2 : INT := nTest1;
nTest3 : INT;
nTest4 : INT;
nTest5 : INT;
nTest6 : INT;
nIndex : INT;
nCounter : INT;
END_VARFOR nCounter := 1 TO 100 DO
nTest3 := nTest1 + nTest2; // => SA0041
nTest4 := nTest3 + nCounter; // no loop-invariant code, because nTest3 and nCounter are used within loop
nTest6 := nTest5; // simple assignments are not regarded
END_FOR
FOR nIndex := 1 TO cMax-1 DO // => SA0041 for "cMax-1"
nCounter := nCounter + 1;
END_FOR