SA0080: Dizi dizin exeeds dizi aralığı için döngü dizin değişkeniPermalink

Dizin değişkeninin bir dizi dizinine erişmek için kullanıldığı ve dizi dizininin aralığını aştığı FOR deyimlerini algılar

Gerekçe: Diziler tipik olarak ‎FOR‎ döngülerinde işlenir. Sayaç değişkeninin başlangıç ve bitiş değerleri tipik olarak dizinin üst ve alt sınırlarıyla eşleşmelidir (veya en azından bu sınırları aşmamalıdır). Burada tipik bir hata nedeni, dizi sınırları değiştirildiğinde ve sabitler dikkatli kullanılmadığında veya ‎FOR‎ döngüsünde yanlışlıkla dizi bildirimindekinden farklı bir değer kullanıldığında tespit edilir.

Önemliymiş: Yüksek

Örnek

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