Seite 1 von 1
Module mit Makros
Verfasst: 02.04.2015 12:41
von Imhotheb
Hallo Zusammen,
ich habe schon die Hilfe von PB rauf und runter gelesen, habe aber nicht das gefunden wonach ich suche.
Das hier habe ich gefunden:
Wenn die Anweisungen Define, EnableExplicit, EnableASM in einem Modul verwendet werden, haben sie keine Wirkung außerhalb des jeweiligen Moduls, und umgekehrt.
verstehe nur nicht WO EnableASM hingehört ... in DeclareModul oder Modul
Wann ist inlineASM aktiviert oder nicht?
Wenn es in DeclareModule steht, ist es dann Global wenn ich das Modul importiere?
Code: Alles auswählen
DeclareModule MeinModul
Macro ASMMACRO
MOV VonHier, DortHin
EndMacro
EndDeclareModule
Module MeinModul
EnableASM
EndModule
; oder so?
DeclareModule MeinModul2
EnableASM
Macro ASMMACRO
MOV VonHier, DortHin
EndMacro
EndDeclareModule
Module MeinModul2
EndModule
Re: Module mit Makros
Verfasst: 02.04.2015 14:18
von ts-soft
Der Compiler arbeitet das EnableASM ab, sobald er drauf trifft, genauso wie das DisableASM. Für globales ASM wäre also Module bzw. DeclareModule der richtige Ort, ansonsten zum Beispiel am Anfang und Ende einer Procedure.
Re: Module mit Makros
Verfasst: 02.04.2015 14:20
von Sicro
Imhotheb hat geschrieben:Code: Alles auswählen
DeclareModule MeinModul2
EnableASM
Macro ASMMACRO
MOV VonHier, DortHin
EndMacro
EndDeclareModule
Module MeinModul2
EndModule
Der Compiler verarbeitet die Codes immer von der 1. bis zur letzten Zeile, findet er dabei "EnableASM", ist im nachfolgendem Code ASM aktiviert.
Benötigst du ASM bereits in DeclareModule, sollte dort "EnableASM" stehen.
Oben im Code ist ASM auch im Module...EndModule aktiviert, die Aktivierung von ASM ist also hier nur einmal notwendig und ist dann im nachfolgendem Code innerhalb des Moduls überall aktiviert. Außerhalb vom Modul ist ASM jedoch deaktiviert, weil der Modul-Code abgekapselt vom Haupt-Code ist.
Code: Alles auswählen
Procedure test()
EnableExplicit
; ...
EndProcedure
myVar = 10
Procedures sind nicht abgekapselt, daher wird auch bei der Variable "myVar" gemeckert, dass sie nicht deklariert ist.
Imhotheb hat geschrieben:Wenn es in DeclareModule steht, ist es dann Global wenn ich das Modul importiere?
Imhotheb hat geschrieben:Zitat:
Wenn die Anweisungen Define, EnableExplicit, EnableASM in einem Modul verwendet werden, haben sie keine Wirkung außerhalb des jeweiligen Moduls, und umgekehrt.
Also nein, nicht global.
Re: Module mit Makros
Verfasst: 02.04.2015 14:23
von NicTheQuick
Er meint glaube ich, wenn er "UseModule" nutzt. Und meine ungetestete Theorie ist, dass es sich nicht auf den Hauptcode auswirkt, wenn man "UseModule" nutzt.
"EnableExplicit" wirkt sich jedenfalls auch nicht auf den Hauptcode aus, wenn man "UseModule" nutzt. Anders ist es bei Macros, die dann direkt im Hauptcode nutzbar sind.
Code: Alles auswählen
DeclareModule asd
EnableExplicit
Macro Print(a)
Debug "haha"
EndMacro
EndDeclareModule
Module asd
EndModule
UseModule asd
a = 5
Print("asd")
Re: Module mit Makros
Verfasst: 02.04.2015 14:36
von 7x7
Ich weiss zwar nicht, was du mit deinem Code machen möchtest, aber das hier...
Imhotheb hat geschrieben:
...klingt schon mal "logisch" falsch! Sinnvoller erscheint mir eher das hier:

Re: Module mit Makros
Verfasst: 02.04.2015 15:09
von Imhotheb
uff ... ok, habe mich etwas missverständlich ausgedrückt
Folgendes:
Ich habe ein ASM-Macro von 7x7 (das mit den Bits) ... ich möchte das nun in ein Modul packen ... wo muss jetzt das Macro hin ? und wo das EnableASM? ohne das EnableASM Global ist.
EDIT: Das Makro soll allerdings auch außerhalb des Moduls verfügbar sein.
Mit ASM selbst kenn ich mich nicht wirklich aus, weshalb ich mir auch keine Gedanken über VonHier und DortHin gemacht habe ... sollte nur ein Beispiel sein ... Aber so sieht man, wer sich damit beschäftigt

Re: Module mit Makros
Verfasst: 02.04.2015 16:57
von Imhotheb
Nach längerem Überlegen stellt sich noch eine Frage ... wie ist ist der Overhead bei Modulen ? Machen solche Makros überhaupt Sinn?
Hätte es nur aufgenommen um eine bessere Struktur zu haben.
Re: Module mit Makros
Verfasst: 02.04.2015 17:39
von NicTheQuick
Module erzeugen kein Overhead. Sie erstellen lediglich einen neuen Namensraum. Das interessiert nur den Compiler. Zur Laufzeit existieren die nicht mehr.