Searcher
29.11.2012, 14:34
Kürzlich benötigte ich Arrays, die mit Index 0 beim ersten Element beginnen. In BASCOM beginnen Arrays standardmäßig mit Index 1. Mit CONFIG BASE kann man das auf 0 umstellen.
Irgendwie nahm ich an, daß zB im "Dim Array(2) As Byte" statement mit der Zwei das letzte zu indizierende Element gemeint sei.
Man kann Array(2) auch ansprechen und Zuweisungen machen. Darf man aber nicht!
Das Array(2) Element wird von der folgend deklarierten Variablen überschrieben!
Wenn mit 2 die Anzahl einzurichtender Elemente gemeint ist und nicht als letztes zu adressierendes Element, sollte der Compiler bei Ansprechen von Array(2) einen Fehler melden.
Ich finde, daß das in die Beschreibung zum Einrichten eines Arrays gehört und der Compiler wenigstens bei Ansprechen des ungültigen Elements mit einer Konstanten einen Fehler ausgibt. Das tut er, wenn das nächst höhere, auch ungültige, nicht existierende Element :) angesprochen wird.
Habe ich in der Demo Version 2.0.5.0 festgestellt und heute auf 2.0.7.5 umgestellt. Ist dort aber genau so. In der BASCOM Hilfe zum Kommando CONFIG BASE gibt es den Hinweis, daß das letzte Element invalid sei.
Im Simulator nachzuvollziehen mit folgendem Code:
'##### BASCOM Demo Version 2.0.5.0 #####
'##### BASCOM Demo Version 2.0.7.5 #####
$regfile = "m88def.dat"
$framesize = 32
$swstack = 32
$hwstack = 36
$crystal = 8000000
Config Base = 0 'Array Indices beginnen mit 0
Dim Array(2) As Byte 'Array mit 2 (3?) Elementen einrichten
Dim X As Byte 'Bytevariable einrichten
Array(0) = 1
Array(1) = 2
Array(2) = 3 'sollte nicht möglich sein -> Compiler Fehlermeldung
'Array(3) = 4 'Compiler reports "Index out of range[3]", OK
X = 1 'Hier wird im SRAM Speicher Array(2) überschrieben!!!
End 'end program
Falls ich da offene Türen einrenne, bitte ich schon mal um Entschuldigung :-b
Gruß
Searcher
Irgendwie nahm ich an, daß zB im "Dim Array(2) As Byte" statement mit der Zwei das letzte zu indizierende Element gemeint sei.
Man kann Array(2) auch ansprechen und Zuweisungen machen. Darf man aber nicht!
Das Array(2) Element wird von der folgend deklarierten Variablen überschrieben!
Wenn mit 2 die Anzahl einzurichtender Elemente gemeint ist und nicht als letztes zu adressierendes Element, sollte der Compiler bei Ansprechen von Array(2) einen Fehler melden.
Ich finde, daß das in die Beschreibung zum Einrichten eines Arrays gehört und der Compiler wenigstens bei Ansprechen des ungültigen Elements mit einer Konstanten einen Fehler ausgibt. Das tut er, wenn das nächst höhere, auch ungültige, nicht existierende Element :) angesprochen wird.
Habe ich in der Demo Version 2.0.5.0 festgestellt und heute auf 2.0.7.5 umgestellt. Ist dort aber genau so. In der BASCOM Hilfe zum Kommando CONFIG BASE gibt es den Hinweis, daß das letzte Element invalid sei.
Im Simulator nachzuvollziehen mit folgendem Code:
'##### BASCOM Demo Version 2.0.5.0 #####
'##### BASCOM Demo Version 2.0.7.5 #####
$regfile = "m88def.dat"
$framesize = 32
$swstack = 32
$hwstack = 36
$crystal = 8000000
Config Base = 0 'Array Indices beginnen mit 0
Dim Array(2) As Byte 'Array mit 2 (3?) Elementen einrichten
Dim X As Byte 'Bytevariable einrichten
Array(0) = 1
Array(1) = 2
Array(2) = 3 'sollte nicht möglich sein -> Compiler Fehlermeldung
'Array(3) = 4 'Compiler reports "Index out of range[3]", OK
X = 1 'Hier wird im SRAM Speicher Array(2) überschrieben!!!
End 'end program
Falls ich da offene Türen einrenne, bitte ich schon mal um Entschuldigung :-b
Gruß
Searcher