Was bedeuten * und \ im Zusammenhang mit einem Identifier?

Anfängerfragen zum Programmieren mit PureBasic.
MikeHart
Beiträge: 14
Registriert: 05.09.2017 12:19
Wohnort: Leverkusen

Was bedeuten * und \ im Zusammenhang mit einem Identifier?

Beitrag von MikeHart »

Ich habe zwar massig Erfahrung mit anderen Programmiersprachen, aber PureBasic benutze ich erst seit gestern um damit einen Codeeditor zu erstellen. Bin auf GoScintialla welches die Arbeit mit dem Scintilla Gadget vereinfachen soll.
Im source code finde ich Zeilen wie z.B. die folgende, welche sich mir noch nicht erschliesst.

Code: Alles auswählen

If *this And *this\callback And IsGadget(*this\id)
Dabei habe ich Fragezeichen bzgl. * und \ . In der Doku bin ich noch nicht drauf gestossen, insofern meine Frage. Was bedeuted *this und *this\callback? Ist *this die Adresse zu einem Object namens this? Und *this\Callback die Adresse des Feld Callback innerhalb des Objects this? Ich dachte bisher das PB nicht objektorientiert ist. Oder handelt es sich hier um eine Struktur namens this und deren Feld Callback?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Was bedeuten * und \ im Zusammenhang mit einem Identifie

Beitrag von NicTheQuick »

Wenn du schon mit anderen Programmiersprachen zu tun hattest, dann formuliere ich es einfach:

Du hast eine Variable vom Typ Integer, kannst ihre Speicheradresse einem Pointer vom Typ Integer zuweisen und dann mit dem Pointer arbeiten.
In diesem Fall hat die Struktur 'Integer' genau ein Feld, nämlich 'i.i'. Mit dem Backslash kann man auf dieses Feld zugreifen.

Code: Alles auswählen

variable.i = 5
*pointer.Integer = @variable
Debug *pointer\i
Bild
MikeHart
Beiträge: 14
Registriert: 05.09.2017 12:19
Wohnort: Leverkusen

Re: Was bedeuten * und \ im Zusammenhang mit einem Identifie

Beitrag von MikeHart »

Ok, * und @ erschliessen sich mir nun. Das mit dem \ habe ich noch nicht ganz verstanden, ich vermute weil i einmal der Variablentyp Integer darstellt und dann ein Feld in einer Struktur ist?!? Somit wären in meinem Beispiel Callabck und ID eigens definierten Variablentypen oder Felder?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Was bedeuten * und \ im Zusammenhang mit einem Identifie

Beitrag von NicTheQuick »

Ja, das sind dann Felder. Siehe auch mein Video zu Strukturen und Interfaces. Die ersten paar Minuten sollten reichen.
Bild
MikeHart
Beiträge: 14
Registriert: 05.09.2017 12:19
Wohnort: Leverkusen

Re: Was bedeuten * und \ im Zusammenhang mit einem Identifie

Beitrag von MikeHart »

Danke für Deine Hilfe, das werde ich mir heute Abend wenn ich von der Arbeit zurück bin, anschauen.

Im Prinzip sind ja die meisten Programmiersprachen ähnlich, unterscheiden sich dann aber doch in Kleinigkeiten.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Was bedeuten * und \ im Zusammenhang mit einem Identifie

Beitrag von NicTheQuick »

Die Pointer bei Purebasic sind schon etwas speziell, das stimmt. Zum Beispiel gehört das Sternchen vor dem Variablennamen tatsächlich immer zum Namen dazu. Ohne Sternchen ist es eine normale Variable und hat einen eigenen Wert. Strukturfelder können auch Pointer sein, aber wenn man mittels Backslash auf sie zugreift, muss man das Sternchen weglassen. Das ist sehr inkonsequent und kann reichlich verwirren.

Das geht nicht:

Code: Alles auswählen

Structure test
	*pointer
	pointer.i
EndStructure
Das geht aber:

Code: Alles auswählen

Define *pointer = 1
Define pointer.i = 2
Debug *pointer
Debug pointer
Und hier die Sache mit dem Weglassen des Sternchens:

Code: Alles auswählen

Structure bar
	*pointer
EndStructure

Define foo.bar
foo\pointer = 3

Debug foo\pointer
Bild
Antworten