Declare und Procedure

Anfängerfragen zum Programmieren mit PureBasic.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Declare und Procedure

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag 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?
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag 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)
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag 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
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag 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
Zuletzt geändert von TomS am 03.07.2009 14:41, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
walter741
Beiträge: 68
Registriert: 26.10.2008 09:21
Computerausstattung: P4, 2600, 1,5GB Ram, XP SP3
Wohnort: Wien

Beitrag 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
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

TomS hat geschrieben:Das wird einen Fehler erzeugen....

Code: Alles auswählen

Return Duesseldorf()
Stimmt :mrgreen:
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Müsste

Code: Alles auswählen

Return Dusseldorf()
heißen

:mrgreen: bitte nicht ernst nehmen
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten