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_VAR
FOR 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