[Bug?] Verwirrung mit SizeOf()

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

[Bug?] Verwirrung mit SizeOf()

Beitrag von NicTheQuick »

Folgender Code:

Code: Alles auswählen

Structure TestStruc
  a.l
  b.w
  c.b
EndStructure

hallo.TestStruc
Debug SizeOf(TestStruc)
Debug SizeOf(hallo)

TestStruc.POINT
Debug SizeOf(TestStruc)
Ich habe eine Struktur [c]TestStruc[/c] und eine Variable [c]TestStruc[/c], allerdings mit der Struktur [c]POINT[/c].
So wie es aussieht orientiert sich [c]SizeOf()[/c] immer mit höherer Priorität an der Struktur. Kann man da noch eine Option einbauen oder gleich einen neuen Befehl, der nur für Variablen funktioniert.

Wenn man jetzt einer Variablen den Namen gibt, wie ihn schon irgendeine Struktur in den Residents hat, könnte das eine böse Fehlerquelle sein. Und wenn sie gefunden hat, muss man entweder irgendwie die Struktur entfernen oder aber jedes einzelnen Vorkommen dieser Variable umbenennen.
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

@Nic:

Du hast Recht. Das wird eigentlich IMHO auch nicht ganz sauber von PB unter-
schieden, ob's nun die Struktur selbst, oder eine Variable, mit der Struktur
gemeint ist.

In C beispielsweise wird das folgendermaßen gemacht:

Code: Alles auswählen

Hallo.TestStruc
TestStruc.POINT
sizeOf (struct TestStruc)     ; liefert Größe der Struktur TestStruc (= Größe von Hallo)
sizeOf (TestStruc)            ; liefert Größe von POINT
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Works as spezified:

Code: Alles auswählen

Structure TestStruc
  a.l 
  b.w 
  c.b 
EndStructure 

hallo.TestStruc 
TestStru.POINT 

Debug SizeOf(TestStruc) 
Debug SizeOf(hallo) 
Debug SizeOf(POINT)
Debug SizeOf(TestStru) 

POINT.TestStruc
Debug SizeOf(POINT)
Also aus meiner Sicht kein BUG. Ausser das die Doku hier deutlicher drauf hinweisen sollte.
Denkt mal drüber nach :wink:
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Laut Hilfe ist es ein Bug. Da steht nämlich nichts über Prioritätenvergabe von Structure, Variable oder Interface.
Das kann man jetzt sicherlich sehen wie man will. Aber zwei getrennte Befehl oder eine Option für Strukturen und Variablen halte ich für äußerst wünschenswert.

Und verwirrend ist es trotzdem. Oder siehst du das anders, IcoSoft?
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

NicTheQuick hat geschrieben:... Aber zwei getrennte Befehl oder eine Option für Strukturen und Variablen halte ich für äußerst wünschenswert.?
Sehe ich genauso! (Wer liest schon die Doku vollständig und behält das Gelesene im Kopf?)
Besser wäre hier eine Angleichung an C (hier ein Vorschlag):

Code: Alles auswählen

SizeOf (TestStruc)        ; Variable
SizeOf (struct TestStruc)  ; Structure
SizeOf (interface TestStruc) ; Interface

Und sollte auch entsprechend mit Fehlermeldungen abgesichert sein.
NicTheQuick hat geschrieben:Und verwirrend ist es trotzdem. Oder siehst du das anders, IcoSoft?
Kein Thema, sehr verwirrend! Und sollte wie z.B. oben vorgeschlagen verbessert werden. Vieleicht kann @Andre hier mit Fred diskutieren?
NicTheQuick hat geschrieben:...IcoSoft?
Meinst Du wirklich mich? :wink:
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Also ich wüde eher vorschlagen, dass man als 2. optionalen Parameter angibt, wo PB nachschlagen soll. Dies erhält die Kompatiblität zu alten Sources aufrecht und man kann trozdem dann noch die neue Variante verwenden. Hier ein Beispiel:

Code: Alles auswählen

sizeof(TestStruc)
sizeof(TestStruc, #PB_Variable)
sizeof(TestStruc, #PB_Structure)
sizeof(TestStruc, #PB_Interface)
und wie wäre es dann noch mit der Option [c]sizeof(TestStruc, #PB_Procedure)[/c] ;)? Fände ich mal lustig.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

MVXAs Vorschlag würde mir auch am besten gefallen, da hier die Kompatibilität gewahrt wird.

Aber ich würde sagen, jetzt warten wir erstmal auf Andre.

So, Kinder. Und jetzt rufen wir alle zusammen unseren lieben Andre.

1, 2, 3...

...ANDREEEEEEEEEE!
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

--- Ich rede hier nur Schwachsinn, deshalb gelöscht ---
Zuletzt geändert von DrShrek am 15.06.2005 16:35, insgesamt 3-mal geändert.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

Ich finde die Variante von MVXA auch am besten ... rein optisch zumindest,
sieht es ja fast schon aus wie PB Syntax ;-)

Werde mal am besten nen Thread im englishen Forum starten ...
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Benutzeravatar
benny
Beiträge: 383
Registriert: 29.08.2004 09:18
Wohnort: Am Ende des www's
Kontaktdaten:

Beitrag von benny »

So, unser Anliegen ist nun im englishen Forum als Wishlist gepostet. Wer
ihn verfolgen will :

http://forums.purebasic.com/english/vie ... highlight=


@IceSoft:

Habe mir eben gerade mal Dein Beispielcode angeguckt. Das geht aber an
unserem Problem total vorbei. Da es ja um den Fall geht, was für einen Wert
sizeOf zurückliefert, wenn eine Variable und eine Struktur den selben
Namen haben, aber anderen Types sind :!:
So long,
benny!
.
nur t0te f1sche schw1mmen m1t dem str0m - 00100 !
Antworten