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