Doppelte Deklaration bei Global möglich oO

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

Doppelte Deklaration bei Global möglich oO

Beitrag von DarkSoul »

Eine globale Variable in meiner Fotoverwaltung sollte anfänglich den Wert '-1' erhalten. Was auch immer ich mit

Global marked=-1

gemacht habe, es kam immer 0 "unten an". Nachdem ich den Code aufgeräumt und sauber durchkommentiert habe, ist mir weiter unten ein geschickt zwischen procedure-blöcken verirrtes

Global marked=0

in die Hände gefallen, was mir erst beim einklappen der prozeduren im editor aufgefallen ist.
Global marked=-1
...hier passiert irgendwas mit der variable...
Global marked=0
...auch hier passiert was mit der variable...
Alles auf der gleichen Ebene, nicht irgendwo in ner Procedure drin oder so.
Hätte der Compiler da nicht quaken müssen von wegen doppelte definition? Zumal die Variable dazwischen bereits verwendet wurde :shock: :evil:
Ich fände es besser, wenn sowas sinnleeres vom Compiler beanstandet werden würde, weil sowas ist echt nervig. Entweder die Variable ist global für immer oder eben nicht.

Oder sehe ich das jetzt irgendwie falsch und das ist, warum auch immer, gewollt?

System:
pb 4.60 32 bit (oder noch höher, jedenfalls das neueste pb von der purebasic-seite, weil ich es gestern neu installieren musste)
win 7 64 bit, Intel core I3-CPU
Bild
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: Doppelte Deklaration bei Global möglich oO

Beitrag von Derren »

Warum ist das ein Bug?
Global ist eine Eigenschaft, die einer Variable zugeteilt wird.
Dein Fehler ist, dass du die Variable überschrieben hast.

Code: Alles auswählen

Global var = 1
Global var = 0

Code: Alles auswählen

Global var = 1
var = 0
Bei Global wird nicht gemeckert, da der "Scope" der Variable ja nicht geändert wird. In so fern wird das zweite Global einfach ignoriert.
Anders siehts da aus, wenn du versuchst eine lokale Variable im Nachhinein zu globaliseren.

Code: Alles auswählen

Define var = 1
Global var = 0
Zeile 2: Variable bereits mit einem anderen Gültigkeitsbereich deklariert: var.
Signatur und so
Antworten