Globals in Proceduren

Anfängerfragen zum Programmieren mit PureBasic.
DerProgrammierer78
Beiträge: 126
Registriert: 24.10.2004 21:11
Wohnort: Ahlen

Globals in Proceduren

Beitrag 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 ?
Der Computer ist der beste Freund des Menschen.
Aber wer so viele Freunde hat wie ich vergrault damit jede Frau!!!!!!! ;-)
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Globals in Proceduren

Beitrag 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
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Ein kurzer Code-Schnippsel, anhand dessen man Deinen Fehler
> nachvollziehen kann, wäre hilfreich

definitiv.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Beitrag 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.
PB 4.xx (Windows & Linux & Mac OS X)
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion." :lol:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

und ein EnableExplicit ist immer sehr hilfreich:

Code: Alles auswählen

EnableExplicit

Global FuerchterlichLangerUndUmstaendlicherVariablenname.l

Procedure TesteMich()
  Debug FuerchterlichLangerUndUmstandlicherVariablenname
EndProcedure

TesteMich()
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Beitrag 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.
PB 4.xx (Windows & Linux & Mac OS X)
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion." :lol:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Beitrag 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:
PB 4.xx (Windows & Linux & Mac OS X)
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion." :lol:
DerProgrammierer78
Beiträge: 126
Registriert: 24.10.2004 21:11
Wohnort: Ahlen

Beitrag 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()
Der Computer ist der beste Freund des Menschen.
Aber wer so viele Freunde hat wie ich vergrault damit jede Frau!!!!!!! ;-)
Antworten