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 Elementangesprochen 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:
Falls ich da offene Türen einrenne, bitte ich schon mal um EntschuldigungCode:'##### 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
Gruß
Searcher








Hoffentlich liegt das Ziel auch am Weg
Zitieren

Lesezeichen