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
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=52007Shield 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".