Makros - Wie geht das?

Anfängerfragen zum Programmieren mit PureBasic.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Makros - Wie geht das?

Beitrag von Kaeru Gaman »

wie ist das eigentlich mit #Macro

1. wie ist die syntax genau?

2. wie sieht das mit zeilenschaltungen aus, also,
kann ich auch einzelne begriffe in ein macro packen, oder nur vollständige zeilen?
d.h. kann ein macro ein argument für eine funktion sein?

...leider hab ich in der help nix gefunden... (vielleicht auch falscher suchbegriff)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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

Beitrag von NicTheQuick »

In PureBasic gibt es noch keine Makros.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Doch, man kann sie über das InlineASM realisieren. Aber offiziel gibt es sie noch nicht :allright:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ja, ich hatte die tage hier was aufgeschnappt, mit nem PB-Befehl in nem inline-ASM-Makro...

deshalb frage ich...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Du meinst das aus dem englischen?
Das geht doch so ganz prima, würde ich sagen. Warum Fred das nicht
in PB eingebaut hat ist verwunderlich. Aber wenn jetzt schon alles in PB 3.94.. eingebaut wird, dann bleibt für PB 4 nicht mehr viel übrig.

Code: Alles auswählen

!macro Test 
!{
   MessageRequester("Macroausgabe", "Ich bin jetzt ein Macro")
   RunProgram("Notepad")
! }

!Test 
!Test
[Edit ]
Oder War das vielleicht so gemeint?

Code: Alles auswählen

!macro Test
!{
   A.s="Dies ist ein Beispiel"
   b.l= 20000
! }
Debug " --------------------------------------------"
Debug " Ohne ausführen des Macros"
Debug " --------------------------------------------"
Debug A
Debug b

Debug " --------------------------------------------"
Debug "Und jetzt mal das Macro starten"
Debug " --------------------------------------------"
!Test
Debug A 
Debug b
MfG Falko
Zuletzt geändert von Falko am 01.10.2005 20:49, insgesamt 1-mal geändert.
Bild
Win11 Pro 64-Bit, PB_6.11b1
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

Beitrag von ts-soft »

Wo ist der Vorteil :freak:

Code: Alles auswählen

Procedure Test()
   MessageRequester("Macroausgabe", "Ich bin jetzt eine Procedure")
   RunProgram("Notepad")  
EndProcedure
!macro Test
!{
   MessageRequester("Macroausgabe", "Ich bin jetzt ein Macro")
   RunProgram("Notepad")
! }

!Test
Test()
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
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Die Code-Geschwindigkeit :wink:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@ts

die performance...

es geht darum, werte aus einem structured-array auszulesen und umzurechnen...

das kann aber ziemlich oft pro schleifendurchlauf passieren,
und die dauer eines schleifendurchlaufes soll (evtl.) in ein frame passen...

da es sich um eine kurze formel handelt, erschien mir ein macro sinnvoll...

ABER:

da dieser parameter auch ggf. als argument für procedures verwendet werden soll, ist die sache hinfällig.

außerdem können diese macros wohl keine argumente bekommen, oder?

....son richtig mächtiges macro wär schon schick...
so wie in POV-Script...

ich werde wohl zusätzlich zur Procedure ein "template" mitliefern...
(also, eine kurze textzeile mit der formel, die der benutzer in seinen quelltext kopieren kann)
Zuletzt geändert von Kaeru Gaman am 01.10.2005 20:59, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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

Beitrag von ts-soft »

AndyX hat geschrieben:Die Code-Geschwindigkeit :wink:
Weder der MessageRequester, noch RunProgramm werden schneller ausgeführt. Das was der Makro-Aufruf evtl. schneller als der Proceduraufruf ist, ist wohl IMHO kaum messbar.
Ansonsten haste ja recht, aber das Beispiel ist etwas unglücklich gewählt :wink:
Mit Gosub sollte die Geschwindigkeit aber schon wieder gleich sein
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@ts

das beispiel ist wirklich unglücklich gewählt...

bei einer simplen werteberechnung fiele der zusätzliche procedure-aufruf extrem ins gewicht.

das macro wird zur compilierungszeit ersetzt, es steht also effektiv die formel direkt im quellcode

[edit]

Gosub in nem include-file?

oder besser noch, in ner UserLib?

nee, schon ok.. ich hab ja garnicht verraten, was ich vorhabe...

nen macro als include mitzuliefern kann ich mir ja vorstellen...

gehen gosubs nach "oben?"

...dann müßte ich sie doch mit Goto überspringen... wüärx..

aber selbst ein Gosub ist nicht exakt genauso schnell wie ein macro...

auch dieser jump kostet zeit, auch wenn man sich die stack-bearbeitung einer proc spart...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten