Seite 1 von 4
Makros - Wie geht das?
Verfasst: 28.09.2005 12:49
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)
Verfasst: 28.09.2005 16:50
von NicTheQuick
In PureBasic gibt es noch keine Makros.
Verfasst: 28.09.2005 17:31
von AndyX
Doch, man kann sie über das InlineASM realisieren. Aber offiziel gibt es sie noch nicht

Verfasst: 01.10.2005 01:00
von Kaeru Gaman
ja, ich hatte die tage hier was aufgeschnappt, mit nem PB-Befehl in nem inline-ASM-Makro...
deshalb frage ich...
Verfasst: 01.10.2005 20:41
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
Verfasst: 01.10.2005 20:49
von ts-soft
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()
Verfasst: 01.10.2005 20:54
von AndyX
Die Code-Geschwindigkeit

Verfasst: 01.10.2005 20:56
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)
Verfasst: 01.10.2005 20:58
von ts-soft
AndyX hat geschrieben:Die Code-Geschwindigkeit

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

Mit Gosub sollte die Geschwindigkeit aber schon wieder gleich sein
Verfasst: 01.10.2005 21:02
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...