Bascom - ein Fehler der Zeit gekostet hat

OP (Firma: Manfred) #2747611
Hi,

Bascom ist ja recht simpel in der Anwendung, allerdings hat mich 
folgender Vertippser sehr viel Zeit gekostet:
1
$regfile = "m16def.dat"
2
Dim Byt As Byte
3
Byt = 1
4
Dim Ramcodes(10) As Byte
5
Const Ccperiodetag = 2
6
Ramcodes(3) = 47
7
Byt = Ramcodes(byt + Ccperiodetage)
8
Print B

Das lässt sich problemlos kompilieren -
nur leider erkennt Bascom den Tippfehler nicht
(cperiodetage statt cperiodetag) und zwar nur in der Konstellation mit 
dem byt-Offset)

Absicht oder Bug?
Version: 2.0.7.3.001 Vollversion
Gast #2747623
Naja, hier sitzt der Bug vor dem Monitor.
Wenn du Zeit sparen wolltest, warum beschäftigst du dich dann mit dem 
Lernen einer Programmiersprache?
Keine Stackwerte, kein End und beim compilieren gibt es eine 
Fehlermeldung, die kein compilieren zuläßt.
Warum müssen Anfänger immer unbedingt verschachtelte Rechnungen 
ausführen?
Berechne den Arrayzeiger extra und du wirst sehen, daß es geht.
Auch Bascom verlangt mitdenken.
OP (Firma: Manfred) #2747625
Oh Weh schrieb:
> Naja, hier sitzt der Bug vor dem Monitor.
> Wenn du Zeit sparen wolltest, warum beschäftigst du dich dann mit dem
> Lernen einer Programmiersprache?
> Keine Stackwerte, kein End und beim compilieren gibt es eine
> Fehlermeldung, die kein compilieren zuläßt.
Oh Weh, hast du nicht einmal mitbekommen, dass das Listing auf den 
Fehler reduziert wurde, die 40kb-Binärcode vom Originalprogramm auf 
Atmega644 wollte ich nicht posten ;-)

> Warum müssen Anfänger immer unbedingt verschachtelte Rechnungen
> ausführen?
Wo steht was von Anfänger?

> Berechne den Arrayzeiger extra und du wirst sehen, daß es geht.
Bascom kann das auch in den Klammern!
Gast #2747642
Weil Bascom nicht deklarierte Variablen zulässt, die auf 0 setzt und 
damit munter weiterrechnet. In anderen Programmiersprachen gibt es 
zumindest eine Warnung.

Gruß aus Heidelberg
OP (Firma: Manfred) #2747654
Umpa Lumpa schrieb:
> Weil Bascom nicht deklarierte Variablen zulässt, die auf 0 setzt und
> damit munter weiterrechnet. In anderen Programmiersprachen gibt es
> zumindest eine Warnung.
>
Hallo,
das stimmt so nicht, Bascom prüft eigentlich auf nicht deklarierte 
Variablen, nur in dem speziellen Fall nicht -deshalb vermute ich ja den 
Bug
1
$regfile = "m16def.dat"
2
Dim Byt As Byte
3
Byt = 1
4
Dim Ramcodes(10) As Byte
5
Const Ccperiodetag = 2
6
Ramcodes(3) = 47
7
Byt = Ramcodes(byt + Ccperiodetage)
8
Print Ccperiodetage
9
Print Byt
Jetzt schreit der Compiler sehr wohl bei der Zeile
Print Ccperiodetage

nur in der Zeile
Byt = Ramcodes(byt + Ccperiodetage) erkennt er den Fehler nicht.
Gast #2747755
Manfred S. schrieb:
> Umpa Lumpa schrieb:
>> Weil Bascom nicht deklarierte Variablen zulässt, die auf 0 setzt und
>> damit munter weiterrechnet. In anderen Programmiersprachen gibt es
>> zumindest eine Warnung.
>>
> Hallo,
> das stimmt so nicht, Bascom prüft eigentlich auf nicht deklarierte
> Variablen, nur in dem speziellen Fall nicht -deshalb vermute ich ja den
> Bug

Stimmt, Variablen müssen deklariert werden, andernfalls bricht der 
Compiler mit einer Fehlermeldung ab. Ich bin mir allerdings nicht sicher 
(und habe das Tutorial auch gerade nicht zur Hand), ob der Variablenname 
nicht nur bis zu einer bestimmten Länge "geparsed" wird...

MfG
Heribert
OP (Firma: Manfred) #2747781
So, der Fall ist geklärt.
Es war wirklich ein Bug.

Hier die Antwort von Mark Alberts aus dem MCS-Supportforum:

"yes this is a bug, the constant is evaluated to a 0. original you could 
not use an offset in an array. later i added an option to add a 
constant, and after that also the option to use a variable.
there is probably a test missing."

und weiter:

"of course it is changed in the next update."

Also super Support und etwaige Fehler werden auch gleich korrigiert!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.