Seite 1 von 2

Declare und Procedure

Verfasst: 03.07.2009 12:51
von walter741
Hallo

Ich habe in meinem Code ca. 42 Proceduren auf 6 Dateien aufgeteilt.
Keine einzige Proc. ist Deklariert.
Es werden keine Werte an die Proc. übergeben.
Zum Glück funktioniert der Code, obwohl ich Kreuz und Quer die Proc.
aufrufe, bez Proc. auch andere Proc. aufrufen.
Die Proc. werden mehr oder weniger als Macros verwendet.
ts-soft
Verfasst am: 25 Okt 2008 15:29:17 Titel:

--------------------------------------------------------------------------------

Ich persönlich vermeide Declare, ordne lieber alles in eine sinnvolle
Reihenfolge. Bei Fehlern weiß ich dann auch immer, das ich Oberhalb
suchen muß, bei Declare könnte die Procedure aber auch Unterhalb sein

Nach dem ich dieses Posting gelesen habe, möchte ich doch nachfragen:

Muss oder sollte ich alle Proc. deklarieren oder nur die, die Fehler verursachen?
Sollte man Declare genauso selten benutzen wie GOTO?
Umstellen auf Macros? Code wird dadurch deutlich grösser!

lg Walter

Verfasst: 03.07.2009 12:56
von Kaeru Gaman
Declare brauchst du nur benutzen, wenn eine Procedure aufgerufen werden muss bevor sie definiert werden kann.
das tritt eigentlich nur bei Procedures mit gegenseitiger Abhängigkeit auf.

manche Leute bevorzugen generelle Declares, aber dann aus dem Grund
weil sie ihre Procs lieber ans Ende des Codes setzen, nicht an den Anfang.


Ich würde dir generell dazu raten, zu wissen was du tust und nicht zu sehr kreuz und quer zu arbeiten.

also es spricht nichts dagegen, deine Procs auf siebenunddreißig includes aufzuteilen,
nur musst du sie dann in der Reihenfolge includieren, wie die Procs voneinander anhängig sind.


statt Procs einfach generell Macros zu verwenden ist Unsinn, das bringt garnichts.

und das eigentliche Problem löst es auch nicht, denn auch ein Macro kann nicht benutzt werden, bevor es definiert ist.

Verfasst: 03.07.2009 13:58
von walter741
Das war eine ultraschnelle Antwort.

Eine Procedure die ich bereits mehrfach von anderen Proc. problemlos aufrufe, läst sich von einer neuen Proc. nicht mehr aufrufen.=> Fehlermeldung.
Mit Delares kann der "Fehler" behoben werden, leider weis ich aber nicht warum?

Verfasst: 03.07.2009 14:03
von TomS
Die Procedure, die den Fehler erzeugt, wird wahrscheinlich vor der Procedure, die aufgerufen wird, deklariert. Deswegen erkennt sie die Procedure nicht als Solche. Mit dem Declare Schlüsselwort wird aber allen Aufrufern klar gemacht, dass es eine Procedure gibt, die aber an einer anderen Stelle im Code erst deklariert wird (mit deklariert meine ich hier nicht das Schlüsselwort Declare sondern Procedure)

Verfasst: 03.07.2009 14:16
von walter741
Hallo

Scheinbar habe ich einen Denkfehler mit dem deklarieren.

Ich Inkludiere im MainCode eine Datei mit den Namen Procedure.pb.
In dieser Datei stehen zB 12 Proceduren.

Diese sind also nicht richtig Deklariert?

mfg Walter

Verfasst: 03.07.2009 14:40
von TomS

Code: Alles auswählen

Procedure Amsterdam()
    Return
EndProcedure

Procedure Brussels()
    Return
EndProcedure

Procedure Cuxhaven()
    Return Duesseldorf()
EndProcedure

Procedure Duesseldorf()
    Return
EndProcedure
Das wird einen Fehler erzeugen, das Cuxhaven() eine "nicht vorhandene" Funktion aufruft. Zu diesem Zeitpunkt weiß OB noch gar nichts von der Procedure Duesseldorf.

Code: Alles auswählen

Declare Amsterdam()
Declare Brussels()
Declare Cuxhaven()
Declare Duesseldorf()

Procedure Amsterdam()
    Return
EndProcedure

Procedure Brussels()
    Return
EndProcedure

Procedure Cuxhaven()
    Return Duesseldorf()
EndProcedure

Procedure Duesseldorf()
    Return
EndProcedure
Jetzt läuft alles ohne Probleme, da PB weiß: "Aha. Falls irgendwo eine Procedure aufgerufen wird, die diesen Namen hat, dann muss ich die zu erst finden."


Wenn du die Procedures in der richtigen Reihenfole deklarierst, brauchst du das Declare-Schlüsselwort nicht.

Code: Alles auswählen

Procedure Amsterdam()
    Return
EndProcedure

Procedure Brussels()
    Return
EndProcedure

Procedure Duesseldorf()
    Return
EndProcedure

Procedure Cuxhaven()
    Return Duesseldorf()
EndProcedure

Procedure Duesseldorf()
    Return
EndProcedure

Verfasst: 03.07.2009 14:41
von Kaeru Gaman
> Diese sind also nicht richtig Deklariert?

doch, die stehen nur in der falschen reihenfolge.

eine Procedure kann nicht aufgerufen werden an einer Stelle die weiter oben im Code ist als sie selber.

Verfasst: 03.07.2009 15:11
von walter741
Kaeru Gaman und TomS

Ganz GROSSES Danke an Euch.
Habt Euch viel mühe mit mir gegeben.


For a=1 to 1000
Debug "Danke"
Next a

Walter

Verfasst: 03.07.2009 19:30
von marco2007
TomS hat geschrieben:Das wird einen Fehler erzeugen....

Code: Alles auswählen

Return Duesseldorf()
Stimmt :mrgreen:

Verfasst: 03.07.2009 21:49
von mk-soft
Müsste

Code: Alles auswählen

Return Dusseldorf()
heißen

:mrgreen: bitte nicht ernst nehmen