Global Variablen in Includes

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Global Variablen in Includes

Beitrag von memdee »

Ich grüße euch,
es ist mir zwar peinlich, wegen so einem Anfängermist einen neuen Thread zu eröffnen, aber es muss scheinbar doch sein:
Eine Variable, die ich in einer Include Quelldatei mit Global deklariert habe, kann ich in anderen Includes bzw. in der Hauptdatei nicht verwenden - ist das richtig?
Wenn ja, gibt es da einen Weg drumrum oder muss ich tatsächlich alle Prozeduren, die auf die gleichen Variablen zugreifen, in eine einzige Include setzen?

Ich strukturier meine Arbeit gerne, so dass ich alles wiederfinde und nicht eine einzige ellenlange Quelldatei habe.
Vielen Dank für eure Hilfe!
meep?
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Nein, PB hat kein Modulsupport. Setzt du also irgendwo eine Variable
global, ist sie es ueberall.
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Re: Global Variablen in Includes

Beitrag von jear »

memdee hat geschrieben:...Eine Variable, die ich in einer Include Quelldatei mit Global deklariert habe, kann ich in anderen Includes bzw. in der Hauptdatei nicht verwenden - ist das richtig?
Nein, das ist nicht richtig!
Du musst Dir nur vorstellen, der Inhalt der einbezogenen Quelle stünde genau an der Stelle, an der der IncludeFile "" - Befehl steht.

Es kommt also nur darauf an, ob der gute Compiler die globale Vereinbarung schon kennt oder eben noch nicht!

Code: Alles auswählen

;- Inhalt von "global_definitions.pbi"

Global gString.s

;------------------------------------------

Code: Alles auswählen

; Main

gString = "erste Nutzung der globalen Variablen gString"

IncludeFile "global_definitions.pbi"

;- das geht schief
;-------------------------------------------

Code: Alles auswählen

; Main

IncludeFile "global_definitions.pbi"

gString = "erste Nutzung der globalen Variablen gString"

;- das geht glatt
Zuletzt geändert von jear am 23.12.2007 21:19, insgesamt 1-mal geändert.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von memdee »

Will heißen, eigentlich müsste es gehen?

Ich habe nämlich in einer Include eine Variable Global deklariert und in einer Procedure, die sich in dieser Include befindet, aber in der Hauptquelldatei aufgerufen wird, wird dieser Variable ein anderer Wert zugewiesen.
Wenn ich die Variable aber beispielsweise in einer anderen Include (wiederum in einer Procedure) aufrufe, ist sie immer 0.

edit: Da war einer dazwischen ;)

So steht es bei mir:

Code: Alles auswählen

main.pb:
IncludeFile "Common.pbi"
IncludeFile "screen.pbi"
IncludeFile "simulation.pbi" ;<--- deklarierung der variablen

InitEngine3D() : InitSprite()


Open_Window_Main()  <---erste nutzung der variablen, befindet sich in common.pbi

Code: Alles auswählen

simulation.pbi:
Global year.l, countryname$, countryshort$
Global population.l, pop014.l, pop1560.l, pop61plus.l
Procedure SetupSimulation()
  levelfile$="data\levels\lvl1.dat"
  OpenFile(0,levelfile$)
  year=Val(ReadString(0))
  countryname$=ReadString(0)
  countryshort$=ReadString(0)
  population=Val(ReadString(0))
  pop015=Val(ReadString(0))
  pop1560=Val(ReadString(0))
  pop61plus=Val(ReadString(0))
  
  CloseFile(0)
EndProcedure
Hoffe, mein Problem (das ja eigentlich gar nicht bestehen müsste) wird damit klarer.
meep?
Benutzeravatar
memdee
Beiträge: 134
Registriert: 09.09.2004 18:49
Computerausstattung: Win 7 x64
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von memdee »

Ah, ok, jetzt hab ichs...

Code: Alles auswählen

IncludeFile "Common.pbi" 
IncludeFile "screen.pbi" 
IncludeFile "simulation.pbi"
Das war natürlich tatsächlich das Problem, die Reihenfolge der Includes.
Ich danke euch vielmals, dass ihr mich auf etwas aufmerksam gemacht habt, woran ich eigentlich selber hätte denken müssen ;)

Frohe Weihnachten!
meep?
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Das Problem laesst sich auf folgenden Code reduzieren :

Code: Alles auswählen

Procedure test()
  Debug a
EndProcedure

Global a = 10
test()
Pb parst den Code nur einmal, eine Varible muss also schon ganz "oben"
global gesetzt werden.

Code: Alles auswählen

Global a

Procedure test()
  Debug a
EndProcedure

a = 10
test()
Antworten