Seite 1 von 1
Adresse einer Konstanten
Verfasst: 30.08.2007 10:59
von Little John
Hallo zusammen,
kann man die Adresse einer Konstanten wie z.B.
ermitteln? Wenn ja, wie? Mit
@ wie bei Variablen scheint es nicht zu gehen.
Gruß, Little John
Verfasst: 30.08.2007 11:09
von NicTheQuick
Das geht gar nicht, weil Konstanten keine Adressen haben.
Während des Kompilierens werden einfach alle festgelegten Konstanten durch
ihren Wert im Code ersetzt.
Du kannst ja auch nicht die Adresse von der Zahl 4 ermitteln.
Verfasst: 30.08.2007 11:21
von DarkDragon
Der Bug wurde schon im englischen Forum vor kurzem diskutiert soweit ich noch weiß.
Code: Alles auswählen
#Konstante = "Hallo"
Debug @"Hallo"
; Debug @#Konstante
Beides sind Konstanten. Wieso geht das eine nicht, aber das andere?
Normalerweise würde aus Debug @#Konstante doch auch nur Debug @"Hallo" werden

.
Und Konstanten haben sehr wohl eine Adresse, sonst ginge ja Debug @"Hallo" auch nicht. Die werden nur alle in einer section '.data' blah blah gespeichert.
Verfasst: 30.08.2007 11:27
von Zaphod
Eine Stringkonstante ist anders als andere Konstanten, weil ein String natürlich immer eine Adresse haben muss, denn das ist ja kein primitiver Datentyp. Bei einer Zahlkonstante wird aber nur der Wert Precompilermäßig ersetzt.
Verfasst: 30.08.2007 11:43
von DarkDragon
Zaphod hat geschrieben:Eine Stringkonstante ist anders als andere Konstanten, weil ein String natürlich immer eine Adresse haben muss, denn das ist ja kein primitiver Datentyp. Bei einer Zahlkonstante wird aber nur der Wert Precompilermäßig ersetzt.
Ja, aber #Konstante = "Hallo" ist immernoch eine String Konstante (Bei Zahlen geb ich dir recht). Wieso geht dann aber nicht @#Konstante wenn #Konstante = "Hallo"?
Verfasst: 30.08.2007 12:42
von Little John
Meine Frage ist mehr als beantwortet. Danke!
Gruß, Little John
Verfasst: 30.08.2007 13:12
von Zaphod
Na weil #MEIN_STRING ="Hallo" natürlich eine Adresse haben muss, ein String ist ja kein String sondern ein Pointer auf eine Speicherbereich von bestimmter länge.
#MEINE_LONGKONSTANTE = 4711 hat keine Adresse, weil das nach der Ersetzung einfach eine Zahl ist. Ich vermute (ich weiß es nicht) das Zahlkonstanten in PB nicht wie schreibgeschützte Variable wie zb in Java gespeichert sind, sondern wie Zahlliterale die du auch so in deinen Quelltext schreibst. Die haben dann ja nur eine Position in der Executable, aber keinen Bezeichner den man einfach so dereferenzieren kann.
Das wäre also genauso sinnvoll wie die Adresse von "5".
Verfasst: 30.08.2007 13:35
von NicTheQuick
@DarkDragon, Zaphod:
Warum redet ihr aneinander vorbei? Ihr meint doch beide das selbe...?
Verfasst: 30.08.2007 13:40
von DarkDragon
Zaphod hat geschrieben:Na weil #MEIN_STRING ="Hallo" natürlich eine Adresse haben muss
Eben das sag ich doch. Nur leider geht ja @#MEIN_STRING
nicht, @"Hallo" aber schon!
@#MEIN_STRING (Wenn #MEIN_STRING = "Ein String" wie du sagst) führt zu einem Syntaxerror, @"Hallo" aber nicht.
#MEINE_LONGKONSTANTE = 4711 <- Da ist es mir doch klar warum es keine Adresse davon geben kann (Davon rede ich doch auch nicht, hab ich schon oben erwähnt). Aber bei #MEIN_STRING = "Ein String" muss es eine geben.
@NicTheQuick: Jo.

Verfasst: 30.08.2007 15:13
von Zaphod
Jetzt kapier ich was du meinst...