Makros - Wie geht das?
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Makros - Wie geht das?
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)
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.
Der Weise weiß, dass er ein Narr ist.
- 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
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- 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:
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.
[Edit ]
Oder War das vielleicht so gemeint?
MfG Falko
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
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
Zuletzt geändert von Falko am 01.10.2005 20:49, insgesamt 1-mal geändert.
- 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
Wo ist der Vorteil

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@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)
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.
Der Weise weiß, dass er ein Narr ist.
- 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
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.AndyX hat geschrieben:Die Code-Geschwindigkeit
Ansonsten haste ja recht, aber das Beispiel ist etwas unglücklich gewählt

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@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...
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.
Der Weise weiß, dass er ein Narr ist.