Reihenfolge Includes [Gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Micky91
Beiträge: 35
Registriert: 06.11.2013 19:35

Reihenfolge Includes [Gelöst]

Beitrag von Micky91 »

Kann sein das ich hier ein Verständnisproblem habe.
Ich habe das Formular und viele meiner Funktionen (Procduren) in einzelen Dateien ausgelagert, zur besseren Übersicht.
Im der Hauptdatei werden diese dann mit XInclude geladen.
Derzeit wird als erstes die Datei mit dem Formular und der Event-Schleife geladen. Dann die Datei mit den restlichen Funktionen (Proceduren)
In der Event-Schleife wird unter anderem eine Procedur die in der Funktionen-Datei steht aufgerufen werden.
Wieso will der Compiler schon beim Laden der Dateien die Existenz der Proceduren überprüfen? Die werden doch noch gar nicht ausgeführt, sonder nur inkludiert!?
Oder mache ich grundlegend etwas falsch?
Zuletzt geändert von Micky91 am 16.11.2013 15:16, insgesamt 1-mal geändert.
PureBasic 5.72 (x64) | Mac OSX 10.15.6
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

Re: Includes

Beitrag von ts-soft »

>> Wieso will der Compiler schon beim Laden der Dateien die Existenz der Proceduren überprüfen?
Der Compiler führt als erstes alle Dateien zu einer zusammen, also muß auch die Reihenfolge der
Prozeduren stimmen, bzw. sind bei ungünstiger Reihenfolge Declare-Statesment erforderlich.

Es gelten dieselben Regeln, wie bei einer einzelnen Datei!

Gruß
Thomas
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
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Includes

Beitrag von RSBasic »

Was meinst du damit genau?
Bekommst du zufälligerweise solche Meldung?
PureBasic hat geschrieben: Zeile 123: DeineLieblingsProcedure() ist keine Funktion, Array, Makro oder LinkedList.
Wenn ja, dann liegt es daran, dass im Code auf eine bestimmte Prozedur zugegriffen wird, die aber erst später definiert wird.
Um das zu verhindern, gibt es zwei Möglichkeiten:
  • Reihenfolge der Prozeduren anpassen
  • Vorzeitiges Deklarieren mit Declare
\\Edit:
Zu langsam.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Micky91
Beiträge: 35
Registriert: 06.11.2013 19:35

Re: Includes

Beitrag von Micky91 »

Genau.

Code: Alles auswählen

Zeile 73: ImportListe() is not a function (or not available in demo version), array, list, map or macro.
Ich hätte jetzt erwartet das ihm das erstmal egal ist da dieser Aufruf sich innerhalb einer Procedur befindet, letztendlich wird diese Procedur mit der Event-Schleife ja erst fast am Ende des Quelltextes aufgerufen, wenn alle anderen Quelltextteile inkludiert sind.
PureBasic 5.72 (x64) | Mac OSX 10.15.6
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Includes

Beitrag von RSBasic »

Wahrscheinlich meinst du etwa so:

Code: Alles auswählen

EnableExplicit

Procedure A(Variable)
  B(Variable)
EndProcedure

Procedure B(Variable)
  
EndProcedure

A(0)
A() greift auf B() zu, was aber erst später definiert wird, wobei A() erst am Ende aufgerufen wird. Trotzdem muss man wissen, dass der Code nur einmal durchgehend überprüft wird und nicht mehrfach.
Um das Problem beheben zu können, musst du beispielsweise folgendes tun:

Code: Alles auswählen

EnableExplicit

Declare B(Variable)

Procedure A(Variable)
  B(Variable)
EndProcedure

Procedure B(Variable)
  
EndProcedure

A(0)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Micky91
Beiträge: 35
Registriert: 06.11.2013 19:35

Re: Includes [Gelöst]

Beitrag von Micky91 »

Ja genau so ist es.
Danke fürs Aufklären :allright:
PureBasic 5.72 (x64) | Mac OSX 10.15.6
Antworten