Seite 1 von 2

Globals in Proceduren

Verfasst: 31.07.2007 15:03
von DerProgrammierer78
Hallo zusammen...

Irgendwie scheine ich etwas wichtiges übersehen zu haben.

Ich habe das Problem, dass ich im Programmkopf ein paar Globals definiere, aber in den Proceduren gesagt bekomme, dass diese Variablen nicht existieren. Woran kann das liegen ?

Re: Globals in Proceduren

Verfasst: 31.07.2007 15:15
von Kiffi
DerProgrammierer78 hat geschrieben:Woran kann das liegen ?
Auch wenn es hart klingen mag: Da hast Du wohl einen Fehler gemacht! ;-)

Grüße ... Kiffi

P.S.: Ein kurzer Code-Schnippsel, anhand dessen man Deinen Fehler
nachvollziehen kann, wäre hilfreich

Verfasst: 31.07.2007 15:19
von Kaeru Gaman
> Ein kurzer Code-Schnippsel, anhand dessen man Deinen Fehler
> nachvollziehen kann, wäre hilfreich

definitiv.

Verfasst: 31.07.2007 15:19
von Olaf
Code, bitte^^
Vielleicht liegts an der Reihenfolge wie du's geschrieben hast.
Du musst, damit's richtig funktioniert, die Variablen etc. vor deinen Prozeduren deklarieren.
Beispiel:

Code: Alles auswählen

Procedure DebugIt()
  Debug Var
EndProcedure

Global Var.l=3

DebugIt()
ergibt nicht das gewünschte Resultat (gibt erwartungsgemäß - da falsch deklariert - 0 anstatt 3 aus), während

Code: Alles auswählen

Global Var.l=3

Procedure DebugIt()
  Debug Var
EndProcedure

DebugIt()
genau das tut, was es soll, da hier die globalen Variablen bereits vor den Prozeduren deklariert werden.

Verfasst: 31.07.2007 15:22
von Kaeru Gaman
und ein EnableExplicit ist immer sehr hilfreich:

Code: Alles auswählen

EnableExplicit

Global FuerchterlichLangerUndUmstaendlicherVariablenname.l

Procedure TesteMich()
  Debug FuerchterlichLangerUndUmstandlicherVariablenname
EndProcedure

TesteMich()

Verfasst: 31.07.2007 15:28
von Olaf
@Kaeru:

Ja, in solchen Fällen trägt EnableExplicit schon massiv zur Fehlerfindung bei, aber eig. mag ich's nich so sehr, weil ich dann tatsächlich jeden Scheiß vorher deklarieren muss und nich den Komfort von PB nutzen kann, die Variablen einfach mal so zu verwenden/einzuführen, wobei sie dann automatisch deklariert werden.

Verfasst: 31.07.2007 15:32
von ts-soft
>> weil ich dann tatsächlich jeden Scheiß vorher deklarieren muss
Machs wie ich, programmiere einfach keinen Scheiß :mrgreen:
EnableExplicit sollte erzwungen werden, damits nicht mehr so nach Scheiß riecht :lol:

Verfasst: 31.07.2007 15:33
von Kiffi
Olaf hat geschrieben:aber eig. mag ich's nich so sehr, weil ich dann tatsächlich jeden Scheiß vorher deklarieren muss
man kann auch einzelne Blöcke mit EnableExplicit / DisableExplicit klammern.

Grüße ... Kiffi

Verfasst: 31.07.2007 15:46
von Olaf
Kiffi hat geschrieben: man kann auch einzelne Blöcke mit EnableExplicit / DisableExplicit klammern.

Grüße ... Kiffi
Ja, ich weiß...aber wenn ich's schonma an hab, dann will ich's auch durchhalten :lol:

Verfasst: 31.07.2007 17:08
von DerProgrammierer78
Also ich schreib hier mal rein wie ich es gemacht habe ...

Code: Alles auswählen

  Dim ServerAdresse.s(250)
  Global ServerAdresse.s
  ServerAdresse(0) = "Adresse1"
  ServerAdresse(1) = "Adresse1"
  ServerAdresse(2) = "Adresse1"
  ServerAdresse(3) = "Adresse1"
  ServerAdresse(4) = "Adresse1"
  ServerAdresse(5) = "Adresse1"

  Procedure ZeigeServer()
    Debug (ServerAdresse(0))
    Debug (ServerAdresse(1))
    Debug (ServerAdresse(2))
    Debug (ServerAdresse(3))
    Debug (ServerAdresse(4))
    Debug (ServerAdresse(5))
  EndProcedure 

  ZeigeServer()