Indizes bei Bascom fangen immer mit "1" an.
Du startest mit "0". Das kann Effekte haben, die du erstmal beseitigen solltest.
und: For i=0 to 27 ergibt 28 Werte (nicht 27, wie im KOmmentar)
Indizes bei Bascom fangen immer mit "1" an.
Du startest mit "0". Das kann Effekte haben, die du erstmal beseitigen solltest.
und: For i=0 to 27 ergibt 28 Werte (nicht 27, wie im KOmmentar)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Indizes bei Bascom fangen immer mit "1" an
kannst du mir das bitte näher erklären?
Das for i = 0 to 27 28 ergibt ist mir Klar , aber wenn es bei "1" anfängt wieso giebts dann einen "Color_Wert(0)" ?
Ich war mir da auch nicht sicher, daher hab ich manuell den Color_Wert(0) einen Wert gegeben und siehe da, Print color_Wert(0) hat DEN Wert, also gibts einen Color_Wert(0)....?? ODER?
Also
Dim Color_Wert(27) as Byte wo gehts nun los? bei 0 oder bei 1? Sinds nun 27 oder 28 Color_Werte?
Dim Save_wert(280) As Eram Byte wo gehts los? bei 0 oder bei 1?
DANKE
Heiko
Ja, kann verwirren. Sache ist so:
DIM variable ( 27) as irgendwas ' heisst: ein Array von 27 elementen.
FOR x = 1 TO 27
variable(x) = wert
NEXT
aaaaaaaber: Bascom checkt nicht, ob ein Indexwert überhaupt möglich ist
schreibst du
variable( 0 ) = wert
oder
variable( 28 ) = wert
vernichtet Bascom die Daten VOR bzw. NACH dem array, SAGT ABER KEIN WORT !
und es ist glücksache, was dann so im Einzelnen passiert.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
OK, dann vermerk ich mir das so, immer bei "1" anfangen............
Zumindest funktioniert plötzlich die Sache mit dem Eeprom lesen, hatte den Controller 2 Tage nicht angesehen, plötzlich gehts, sehr sehr komisch.
DANKE
Heiko
Das ist nicht richtig.
Bascom gibt in diesem Fall einen "Index out of Range" Fehler aus und compiliert den Code nicht.
Einen statisch deklarierten Index außerhalb des zulässigen Bereiches kann der Bascom-Compiler erkennen, nur dynamische Bereichsüberschreitungen wie:
werden nicht erkannt. Das wäre nur mit zusätzlichem Code möglich, außerdem müsste dann ein Error-Handler vorgesehen werden.Code:x = 28 variable(x) = wert
Dafür ist der Programmierer also selbst verantwortlich.
Gut, ich war nicht ausreichen präzise.
Im Übrigen ist das kein Bascom-Feature. Wenn du durch einen out-of-range-Index nicht gerade eine Zugriffs-Verletzung auslöst, kannst du alle mir geläufigen Systeme u. Plattformen abmurksen.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Das Überschreiben von Variablen mit beliebigen Werten ist verständlicherweise etwas, was kein Programm wegstecken kann.
War aber auch nicht Punkt meines Post, sondern wie sich eben Bascom im Speziellen verhält.
Es wäre selbstverständlich möglich, daß der Compiler Code einbaut, der bei jedem Arrayzugriff den Index auf Gültigkeit prüft, dem Compiler ist schließlich die Größe des Arrays bekannt. Das würde aber einen deutlichen Overhead und damit Verlangsamung des Codes bedeuten und darum wird das üblicherweise nicht gemacht, auch nicht in anderen Programmiersprachen.
Lesezeichen