Seite 1 von 1

Global Variablen in Includes

Verfasst: 23.12.2007 15:58
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!

Verfasst: 23.12.2007 16:07
von edel
Nein, PB hat kein Modulsupport. Setzt du also irgendwo eine Variable
global, ist sie es ueberall.

Re: Global Variablen in Includes

Verfasst: 23.12.2007 16:11
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

Verfasst: 23.12.2007 16:13
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.

Verfasst: 23.12.2007 16:28
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!

Verfasst: 23.12.2007 16:32
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()