Seite 1 von 1

Shared und Protected

Verfasst: 13.01.2010 14:48
von CSHW89
Hi Leute,
hab grad nur ein kleinen bug gefunden. ist eigentlich auch nicht der rede wert. ich fand ihn halt interressant:

Code: Alles auswählen

Procedure test()
  Shared b.i
  Protected b.s   ; <- wird ignoriert
  b = 10
  b = "Hallo"  ; <- Compilefehler
EndProcedure
Die Zeile mit "b = 'Hallo'" gibt einen Fehler. 'Protected b.s' wird also nicht beachtet. meiner meinung sollte der compiler gar nicht erlauben, dass die gleiche variable erst mit shared und dann mit protected declariert wird.

Re: Shared und Protected

Verfasst: 13.01.2010 14:52
von Kaeru Gaman
... beziehungsweise überhaupt ein zweites mal im selben scope definiert wird mit einem anderen Typ...

man sollte noch mal andere kombinationen austesten, und dann kann das ins englische bug-forum.

Re: Shared und Protected

Verfasst: 13.01.2010 18:13
von CSHW89
Also naja, hab noch zwei weitere Beispiele:

folgenden code würd ich jetzt nicht als bug sehen:

Code: Alles auswählen

Global b.i

Procedure hallo()
  Shared b.i
  b = 3
  Protected b.s
  b = "Hallo"
EndProcedure

b = 2
Is denk ich erwartungsgemäß. Und das folgende Beispiel ist praktisch das gleiche:

Code: Alles auswählen

Procedure hallo()
  Global b.i
  b = 3
  Protected b.s
  b = "Hallo"
EndProcedure

b = 2
Andere kombinationen fägt der compiler ab. aber mein erstes beispiel mit shared und protected ist halt etwas merkwürdig, dass halt eine Zeile komplett ignoriert wird.

Re: Shared und Protected

Verfasst: 13.01.2010 20:07
von Kaeru Gaman
wenn Shared, dann innerhalb Shared und außerhalb Define, nicht Global.
wenn Global, dann nur außerhalb, innerhalb ist automatisch.

das erste ist alles Andere als erwartungsgemäß, das müßte auf jeden Fall angemeckert werden.

die Korrekte Fehlermeldung sieht so aus:

Code: Alles auswählen

Define b.i
Define b.s
---------------------------
PureBasic
---------------------------
Line 3: Variable already declared with another type: b.
---------------------------
OK
---------------------------
auch dieses müßte einen Fehler produzieren:

Code: Alles auswählen

Procedure hallo()
  Shared b.i
  b = 3
  Protected b.i
  b = 2
EndProcedure
denn die selbe Variable kann nicht Shared und Protected sein, schon garnicht nacheinander.

wenn das ginge, müßte sie

Code: Alles auswählen

  Shared Protected b.i
definiert werden, um eine Variable die unter Procedures ge-shared wird von einer Globalen zu trennen.
aber PureBasic Shared immer automatisch auch mit dem Hauptprogramm.

Code: Alles auswählen

Define b.i
Procedure hallo()
  Shared b.i
  Debug b
EndProcedure
b = 4711
hallo()
das ist nicht in jeder Sprache so, bei manchen wäre die einfach definierte im Hauptprogramm von den Shared in den Proceduren getrennt,
sie müßte auch im Hauptprogramm als Shared definiert werden, um die selbe zu sein.

also, da muss man mal ne vernünftige Bugmeldung draus machen.

... ich kann jetzt nicht, sonst verhunger ich.