AW: [Allegro] 'ik,x' und '#ik,x A' [war: Absturz von A99]

Fischer, Thomas fischer at sub.uni-goettingen.de
Mi Apr 6 12:00:17 CEST 2011


Hallo Herr Eversberg! 

> #cc wird nicht durch ak=... definiert, sondern nur durch eine 
> Zeile, die mit # anfängt. Mit ak=... kriegen Sie #ch.
> "Nicht definiert" hieß in diesem Fall programmintern, daß die 
> Adresse der Zeichenfolge von #cc dann Null war, und das ist 
> bei C und C++ nicht gut. Jetzt ist sie nicht Null, sondern 
> zeigt auf einen String mit der Länge 0.
> In Wirklichkeit ist das bei C und C++ ein String mit der 
> Länge 1, dessen eines und einziges Zeichen aber der Code 0 
> ist, der jeden String beendet.
> Diese Eigenheit teilt C meines Wissens nicht mit anderen 
> Sprachen, ausnahmsweise ist das jedenfalls nicht unsere Erfindung.

Aha. Ich habe einen Fehler im Skript, der zu einem Absturz führte. Letzteres ist behoben: #cc ist jetzt leer und nicht undefiniert.
Mein Fehler lag darin, dass ich annahm, das ein Kopfbefehl der Art

ak=7.+A

nacheinander die Kategorien mit #7... aufruft und dann nach #+A springt.
Im Prinzip passiert auch wohl etwas ähnliches, die Kategorie wird (unveränderbar) nach #ch und (veränderbar) nach #u1 kopiert, aber nicht *aufgerufen*.
Vielleicht kann das in der Dokumentation noch klarer dargestellt werden, hier wird #cc auch als "die zuletzt benutzte" Kategorie bezeichnet.
Wenn ich an dieser Stelle dann
#71 
aufrufe, so ist #cc mit dem Wert von #71 belegt.
Noch nicht ganz klar ist mir, was der Werte von #cc ist, wenn ich in meinem Beispiel #uxy oder #u1 aufrufe (im letzteren Fall würde ich #cc = #ch vermuten).
Das alles betrifft in gleicher Weise die Indikator-Aktion #ik,x.

Und wenn ein Unterprogrammen aufgerufen wird, so wird #cc *unveränderbar* mit der zuletzt aufgerufen Kategorie belegt und so an alle etwaigen weiteren Unterprogramme weitergereicht.
Sehe ich das so richtig?

Mit freundlichen Grüßen
Thomas Fischer 



Mehr Informationen über die Mailingliste Allegro