PB5.00: nichtexistente Struc in Struc = kein Fehler

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

PB5.00: nichtexistente Struc in Struc = kein Fehler

Beitrag von Regenduft »

PureBasic 5.00 x64 (final) auf Windows 7

Der folgende Code kann kompiliert werden, ohne dass man eine Fehlermeldung oder Warnung erhält:

Code: Alles auswählen

EnableExplicit

Structure bla
  *bla.DieseStrukturExistiertNichtAberPureBasicInteressiertDasNicht ; <- Stern entfernen und es gibt einen Fehler
EndStructure

Define bla.bla
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: PB5.00: nichtexistente Struc in Struc = kein Fehler

Beitrag von DarkDragon »

Das ist eigentlich ein Feature. Das Problem dabei ist nämlich, dass man manchmal Zeiger benötigt, die überkreuz strukturiert sind. Also sowas wie das hier:

Code: Alles auswählen

Structure A
  *Pointer.B
EndStructure

Structure B
  *Pointer.A
EndStructure
Der Compiler geht dabei nur einmal durch den Code. Er kann also nicht bei der Zeile 2 schon prüfen, ob die Struktur B überhaupt existiert, sondern erst ganz am Ende. Um es sauber zu lösen fehlt ein DeclareStructure im Konzept.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Re: PB5.00: nichtexistente Struc in Struc = kein Fehler

Beitrag von helpy »

Regenduft hat geschrieben:PureBasic 5.00 x64 (final) auf Windows 7

Der folgende Code kann kompiliert werden, ohne dass man eine Fehlermeldung oder Warnung erhält:
Solange Du das Element *bla.DieseStrukturExistiertNichtAberPureBasicInteressiertDasNicht NUR als Zeiger verwendest (ähnlich zu einer Integer-Variablen) kann man das ohne Probleme machen. Das ist dann ähnlich zu

Code: Alles auswählen

Structure bla
  *bla
EndStructure
Sobald Du jedoch versuchst mit SizeOf die Größe der Struktur abzurufen oder auf ein Element der nicht deklarierten Struktur zuzugreifen, gibt es eine Fehlermeldung!

Das ist meiner Ansicht somit ausreichend abgesichert!

lg,
guido
Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: PB5.00: nichtexistente Struc in Struc = kein Fehler

Beitrag von Regenduft »

Danke für die Infos! Trotzdem: Eine Überprüfung am Ende eines Durchlaufs wird implementiert. Ein DeclareStructure wird nicht benötigt:
http://www.purebasic.fr/english/viewtop ... =4&t=52007
Shield hat geschrieben:Yeah, but the compiler could check at the end if the structure has actually been defined.
Fred hat geschrieben:The end check is possible and will be added.
Ich muss zugeben, dass ich etwas voreilig mit dem Bugreport war.
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: PB5.00: nichtexistente Struc in Struc = kein Fehler

Beitrag von DarkDragon »

Regenduft hat geschrieben:Danke für die Infos! Trotzdem: Eine Überprüfung am Ende eines Durchlaufs wird implementiert. Ein DeclareStructure wird nicht benötigt:
Was aber nicht so ganz die saubere Art ist, denn man kann nun "zuviele" Pointer deklarieren - er muss sich ja jede Deklaration merken bis ganz zum Schluss.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
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

Re: PB5.00: nichtexistente Struc in Struc = kein Fehler

Beitrag von NicTheQuick »

DarkDragon hat geschrieben:
Regenduft hat geschrieben:Danke für die Infos! Trotzdem: Eine Überprüfung am Ende eines Durchlaufs wird implementiert. Ein DeclareStructure wird nicht benötigt:
Was aber nicht so ganz die saubere Art ist, denn man kann nun "zuviele" Pointer deklarieren - er muss sich ja jede Deklaration merken bis ganz zum Schluss.
Das macht doch dem Compiler nichts aus, ob da nun am Schluss eine oder tausende nicht deklarierte Strukturen sind.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: PB5.00: nichtexistente Struc in Struc = kein Fehler

Beitrag von DarkDragon »

Ja stimmt, die Strukturen braucht es eh immer, es gibt ja keine "Namespaces".
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten