Seite 1 von 2

includefile als subroutine

Verfasst: 16.05.2006 16:48
von obbba
Ich habe die Demoversion von Purebasic. Kann ich da anstatt von

Code: Alles auswählen

IF vorraussetzung = #erfüllt
 GOSUB bla
ENDIF
auch

Code: Alles auswählen

IF vorraussetzung = #erfüllt
 INCLUDEFILE bla.pb
ENDIF
schreiben um Platz zu sparen? Geht das auch in einer Schleife?
Irgendwelche Nachteile?

Verfasst: 16.05.2006 16:55
von ts-soft
Sowas funktioniert bei einem nativen Compiler nicht. Das geht nur bei
interpretierten Sprachen!

Bedingte Compilierung ist möglich, aber das willste glaub ich nicht. Ansonsten
sieh mal unter CompilerIf CompilerEndIf nach.

Verfasst: 16.05.2006 16:59
von Marvin
warum nicht, ts-soft? Soweit ich es verstanden habe steht der Inhalt von der IncludeFile dann ja bei If:

Beispiel:
Inhalt von bla.pb: So schreibst du es:

Code: Alles auswählen

If bedingung = #erfüllt
  IncludeFile "bla.pb"
EndIf
So wird es kompiliert:

Code: Alles auswählen

If bedingung = #erfüllt
  End
EndIf
Oder? :?

Verfasst: 16.05.2006 17:01
von ts-soft
IncludeFile geschieht während der Compilierung, nicht während der RunTime :wink:

Verfasst: 16.05.2006 17:11
von obbba
Leuchtet mir ein. Als exe weiß das programm quasi nicht mehr was mit bla.pb gemeint ist.
Mein programm sieht im Moment so aus:

Code: Alles auswählen

repeat
if ...
gosub ...
endif

if... 
gosub...
endif

if ...
gosub
endif

until ...
end

;------------------------------

bla1:
...

bla2:
...
Die Subroutinen werden also nur ausgeführt, wenn sie aufgerufen werden.
Könnte ich die auch in ein Includefile reinkopieren, was ich dann ganz am Anfang öffne?
Dann würden sie aber alle gleich ausgeführt werden.
Wenn ich Prozeduren nehme muss ich die ganzen Variablen globalisieren.

Verfasst: 16.05.2006 17:24
von ts-soft

Code: Alles auswählen

Goto start
IncludeFile "bla.pb"
start:
Das geht, macht aber nicht viel Sinn :wink:

Verfasst: 17.05.2006 17:23
von Marvin
ts-soft hat geschrieben:IncludeFile geschieht während der Compilierung, nicht während der RunTime
Na, das mein ich doch... Im Source steht IncludeFile, in der Exe steht nur noch der Hauptsource mit allen Includes... Nochmal...
Source:

Code: Alles auswählen

If [...]
IncludeFile "bla.pb"
EndIf
Exe:

Code: Alles auswählen

If [...]
[...] ;Code aus bla.pb
EndIf
:?

Verfasst: 17.05.2006 17:27
von ts-soft
Er möchte die Exe klein halten:

Code: Alles auswählen

If buh
  includefile "blah.pb"
endif
damit die exe kleiner ist, wenn buh unwahr ist :?

Verfasst: 18.05.2006 15:25
von obbba
Nein, nein!

Is schon richtig.

Ist mir egal wie groß die Exe ist. Nur der Code soll nicht so lang werden, weil ich die Demo-Version habe.

Ich probiers einfach aus.

Verfasst: 20.05.2006 13:34
von Kaeru Gaman
grundsätzlich dran denken, was schon ts sagte:

If findet zur laufzeit statt, include zur compilezeit.

natürlich kannst du das, was bei nem If passieren soll, auch in ein include packen,
aber praktische und übersichtlicher wäre es, die sub (oder besser noch eine Procedure)
in ein include zu packen, und in dem If einen aufruf zu belassen.

es ist nichts ungewöhnliches, den source in mehrere includes aufzusplitten.
viele machen das, obwohl sie die vollversion haben.


> Könnte ich die auch in ein Includefile reinkopieren, was ich dann ganz am Anfang öffne?
> Dann würden sie aber alle gleich ausgeführt werden.

wenn du Procedures verwendest, hast du das problem nicht mehr.
wenn du unbedingst subs nehmen möchtest, dann mach das include halt ans ende.