SA0080: Variabile indice del loop per l'indice dell'array esegue l'intervallo dell'arrayPermalink

Rileva le istruzioni FOR in cui la variabile indice viene utilizzata per accedere a un indice di array e supera l'intervallo dell'indice dell'array.

Giustificazione: Gli array vengono tipicamente elaborati in cicli ‎FOR‎. Il valore iniziale e finale della variabile contatore deve di solito corrispondere (o almeno non superare) i limiti superiore e inferiore dell'array. Una tipica causa di errore viene rilevata in questo caso quando i limiti dell'array vengono modificati e le costanti non vengono utilizzate con cura; oppure quando nel ciclo ‎FOR‎ viene utilizzato accidentalmente un valore diverso da quello dichiarato nell'array.

Importanza: Alto

Esempio

PROGRAM PLC_PRG	
VAR
 iIndex1,iIndex2,iIndex3 : INT;
 arWord : ARRAY[1..100] OF WORD;
 arararINT : ARRAY[1..9,1..9,1..9] OF INT;
 arUSINT : ARRAY[0..99] OF USINT;
END_VAR

//1 violation of the rule(lower range is exeeded): SA0080
FOR iIndex1 := INT#0 TO INT#100 DO
	arWord[iIndex1] := INT_TO_WORD(iIndex1);
END_FOR

//6 violations (lower and upper range is exceeded for each array dimension): 3SA0080
FOR iIndex2 := INT#0 TO INT#10 DO
	arararINT[iIndex2, iIndex2, iIndex2] := iIndex2;
END_FOR

//1 violation (upper range is exceeded by the end result of the index), previous expressions on index are not evaluated -> OK
FOR iIndex3 := INT#0 TO INT#50 DO
	arUSINT[iIndex3 * INT#2] := INT_TO_USINT(iIndex3);
END_FOR

--> SA0080: Loop index range of 'Index1' exceeds array range
--> SA0080: Loop index range of 'Index2' exceeds array range