Seite 1 von 1

PB5.00: nichtexistente Struc in Struc = kein Fehler

Verfasst: 06.11.2012 00:30
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

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

Verfasst: 06.11.2012 07:23
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.

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

Verfasst: 06.11.2012 08:40
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

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

Verfasst: 07.11.2012 01:15
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.

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

Verfasst: 07.11.2012 07:25
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.

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

Verfasst: 07.11.2012 13:33
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.

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

Verfasst: 07.11.2012 18:57
von DarkDragon
Ja stimmt, die Strukturen braucht es eh immer, es gibt ja keine "Namespaces".