Seite 2 von 2

Re: Adresse einer benannten String-Konstanten

Verfasst: 27.05.2018 19:13
von Muttonhead
so ganz hab ichs noch nicht verstanden. Dann ist das so.
Es geht mir mehr um das Verständnis über Konstanten im allgemeinen... Also eher offtopic.

Trotzdem nochmal nur mal zwei Szenarien:
Angenommen ich definiere eine Konstante in meinem Code

Code: Alles auswählen

#foo=3 
und würde diese Konstante, genauer deren Bezeichner, im Code an 10 Stellen benutzen...

Eine zweite Version des Codes enthält auch oben genannte Definition der Konstante, benutzt aber an den selben 10 Stellen den Wert 3.

Was also eh noch vor dem Kompilieren passieren würde
Entsteht das "gleiche" Programm?

Wenn ich es richtig verstanden habe, "schleppt" also das kompilierte Programm, die Binery oder Execute sehrwohl einen resevierten Speicherbereich für eine Konstante mit sich herum, obwohl diese dann eigentlich garnicht mehr benutzt wird.
Nur so kann ich es mir erklären, dass man auf Konstanten referenzieren kann

Ich hoffe man konnte meinen schrägen Gedanken irgendwie folgen... :/

Mutton

Re: Adresse einer benannten String-Konstanten

Verfasst: 27.05.2018 19:48
von Josh
Ja, es entsteht das 'gleiche' Programm.

Vielleicht einfacher vorzustellen bei einer Programmiersprache mit einem 'echten' Preprozessor. Da wird der gesamte Sourcecode durchlaufen und folgendes würde passieren:
  • eine Zeile wo eine Konstante definiert wird, fliegt komplett raus
  • jedes vorkommen der Konstante wird dann durch den Wert ersetzt
Wenn jetzt der richtige Compiler kommt, dann weiß der von der Konstanten gar nichts mehr, da diese im Sourcecode gar nicht mehr vor kommt. Da wird nichts mitgeschleppt.

Re: Adresse einer benannten String-Konstanten

Verfasst: 27.05.2018 20:43
von Sicro
Beim Ausführen eines Programms wird die Programmdatei teilweise in den Arbeitsspeicher (RAM) geladen.
Jeder konstante String (innerhalb von Anführungszeichen oder definiert über eine Konstante) ist somit auch im Arbeitsspeicher und hat deshalb eine Speicheradresse.

Code: Alles auswählen

; Gebe Speicheradresse vom konstantem String aus"
Debug @"Das ist ein konstanter String"
Debug @"TEST TEST TEST"
Debug @"Das ist ein konstanter String"
Debug @"TEST TEST TEST"
Wie Josh geschrieben hat, wird die Konstante beim Kompilieren überall durch den Konstanten-Wert ersetzt. Die Konstante existiert also später nicht mehr. Überall steht nur noch der Konstanten-Wert.

Re: Adresse einer benannten String-Konstanten

Verfasst: 28.05.2018 17:50
von Muttonhead
Ok... Dann ist das Definieren einer Konstante "lediglich" Syntaxfutter, was nicht bewertend oder abwertend klingen soll.
Da eine Konstante praktisch für den Compiler nicht existiert, sollte und darf eine Referenz darauf nicht funktionieren...

Code: Alles auswählen

#foo=3
*bar = @#foo
  
tut es auch nicht, egal ob nun numerisch oder String.

Darum wundert mich eigentlich das Bemühen im Thread für entsprechende Workarounds. Die liefern sicherlich ne Adresse, aber bestimmt nicht die der Konstante.

sei es drum, wieder was gelernt :)

Mutton

Re: Adresse einer benannten String-Konstanten

Verfasst: 28.05.2018 18:08
von Josh
Muttonhead hat geschrieben:Da eine Konstante praktisch für den Compiler nicht existiert, sollte und darf eine Referenz darauf nicht funktionieren...
Nicht ganz richtig:

Code: Alles auswählen

#foo$="abc"
*bar = @#foo
wird ersetzt durch

Code: Alles auswählen

*bar = @"abc"
und dann sollte es funktionieren.

Re: Adresse einer benannten String-Konstanten

Verfasst: 28.05.2018 18:53
von Muttonhead
Hm.... cool :)

aber ich denke ein

Code: Alles auswählen

*bar = @"abc"
kann man wiederum durch ein

Code: Alles auswählen

foo.s="abc" 
*bar=@foo
ersetzen.
Ich denke mal in beiden Fällen passiert ähnliches: Allozieren des Speichers, was reinschreiben... Vermutlich wird dies nicht ein "PB-String" sein.
Aber zumindest näher an einer Variablen denn einer Konstanten. Zumindest wird zur Laufzeit des Programmes etwas im Speicher erzeugt.
Und an dieser Konstante @"abc" lässt sich sehr wohl herum manipulieren.

Ok, belassen wir es einfach dabei. War jedenfalls sehr interessant
Auch ich bedanke mich mal artig :)

Mutton

Re: Adresse einer benannten String-Konstanten

Verfasst: 28.05.2018 19:31
von Josh
Muttonhead hat geschrieben:Und an dieser Konstante @"abc" lässt sich sehr wohl herum manipulieren.
In Pb lassen sich sogar Literale manipulieren :D

Code: Alles auswählen

#xx = "xx"
PokeS (@"xx", "yy")

Debug "xx"
Debug #xx

Re: Adresse einer benannten String-Konstanten

Verfasst: 28.05.2018 20:09
von ccode_new
Ja gaaanz toll!

So viele tolle Pointer-Spielereien.

Alles aber total logisch.

Wenn man jetzt noch mit Makros anfängt, entwickelt sich hier eine der grausamsten Arten zu programmieren.

Dann muss man nur noch ohne Zeilenumbrüche [nur mit : ] und mit Sprungmarken programmieren und man hat bald einen so genial unlesbaren Programmcode erschaffen auf dem man sehr stolz sein kann.

Wer liefert den grausamsten Code ?