Module mit Makros

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Module mit Makros

Beitrag 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

weil einfach einfach einfach ist ... mach' ich es anders
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: Module mit Makros

Beitrag 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.
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
Sicro
Beiträge: 964
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Module mit Makros

Beitrag 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.
Zuletzt geändert von Sicro am 02.04.2015 14:24, insgesamt 1-mal geändert.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Module mit Makros

Beitrag 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")
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Module mit Makros

Beitrag von 7x7 »

Ich weiss zwar nicht, was du mit deinem Code machen möchtest, aber das hier...
Imhotheb hat geschrieben:

Code: Alles auswählen

....
    MOV VonHier, DortHin
....
...klingt schon mal "logisch" falsch! Sinnvoller erscheint mir eher das hier:

Code: Alles auswählen

....
    MOV DortHin, VonHier
....
:wink:
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: Module mit Makros

Beitrag 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 :twisted:
weil einfach einfach einfach ist ... mach' ich es anders
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: Module mit Makros

Beitrag 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.
weil einfach einfach einfach ist ... mach' ich es anders
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Module mit Makros

Beitrag von NicTheQuick »

Module erzeugen kein Overhead. Sie erstellen lediglich einen neuen Namensraum. Das interessiert nur den Compiler. Zur Laufzeit existieren die nicht mehr.
Antworten