Code mit aufgelösten Macro Calls
Code mit aufgelösten Macro Calls
Gibt es eigentlich die Möglichkeit ein Listing zu erzeugen mit aufgelösten Macro Calls?
Ich hatte gerade ein Problem mit verschachtelten Macros, wo ich 2 Stunden gebraucht habe um einen trivialen Fehler zu finden.
Der Compiler hatte am Schluß ein fehlendes EndIF bemäkelt, und ich konnte die Stelle nicht einem Macro Call zuordnen. Bei einer aufgelösten Version wären es Minuten gewesen!
Nachdem ich schon Tipps für aufgelöste Assembler Listen gefunden habe, gibt es sowas sicher auch für Macros, oder?
Grüße
Peter
Ich hatte gerade ein Problem mit verschachtelten Macros, wo ich 2 Stunden gebraucht habe um einen trivialen Fehler zu finden.
Der Compiler hatte am Schluß ein fehlendes EndIF bemäkelt, und ich konnte die Stelle nicht einem Macro Call zuordnen. Bei einer aufgelösten Version wären es Minuten gewesen!
Nachdem ich schon Tipps für aufgelöste Assembler Listen gefunden habe, gibt es sowas sicher auch für Macros, oder?
Grüße
Peter
- 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:
Was sind aufgelöste Assembler Listen und was sollen
aufgelöste Macros sein? Die Frage habe ich nun nicht verstanden.
Meinst du damit die Feherbehandlung die mit debuggen nicht funktioniert?
Bei ASM seht in der Hilfe folgendes:
Meinst du das mit aufgelösten Assembler bzw. Macro?
Gruß Falko
aufgelöste Macros sein? Die Frage habe ich nun nicht verstanden.
Meinst du damit die Feherbehandlung die mit debuggen nicht funktioniert?
Bei ASM seht in der Hilfe folgendes:
Und bei Macros wird ein Fenster angezeigt, wenn dieser fehlerhaft ist.- Die Fehler in einem ASM Programmteil werden nicht von PureBasic gemeldet, jedoch von FAsm. Überprüfen Sie einfach Ihren Programmcode, wenn ein solcher Fehler auftritt
Meinst du das mit aufgelösten Assembler bzw. Macro?
Gruß Falko
Was meine ich mit aufgelösten Macros: Ein Macro erzeugt einzelne PB Statements. Im Programm selbst schreibe ich dann nur, z.B.
...
MyMacro(parm1,parm2)
...
Was MyMacro letztlich für Code erzeugt, sehe ich nirgends. MyMacro kann syntaktisch korrekt sein, aber trotzdem unvollständigen PB Code erzeugen.
Ich benütze in meinem Fall verschachtelte und verschränkte Macros in dem IF Ketten erzeugt werden. Es wurde dabei ein unvollständiges IF Statement of ENDIF erzeugt. Makrotechnisch war das in Ordnung. Der Fehler wurde mir dann am Ende vom Compiler gemeldet, am Ende der Prozedur, weit außerhalb der Makroverarbeitung.
Ich hätte nun einfach gerne meine erzeugten IF Statements gesehen um den Fehler leichter einzugrenzen und dann das Macro zu korrigieren.
um bei obigen trivialen Beispiel zu bleiben, würde so eine Liste vielleicht so aussehen:
...
;MyMacro(parm1,parm2,label)
IF Parm1>parm2
goto label
elseif parm2<0
goto label
endif
; End MyMaco
...
...
MyMacro(parm1,parm2)
...
Was MyMacro letztlich für Code erzeugt, sehe ich nirgends. MyMacro kann syntaktisch korrekt sein, aber trotzdem unvollständigen PB Code erzeugen.
Ich benütze in meinem Fall verschachtelte und verschränkte Macros in dem IF Ketten erzeugt werden. Es wurde dabei ein unvollständiges IF Statement of ENDIF erzeugt. Makrotechnisch war das in Ordnung. Der Fehler wurde mir dann am Ende vom Compiler gemeldet, am Ende der Prozedur, weit außerhalb der Makroverarbeitung.
Ich hätte nun einfach gerne meine erzeugten IF Statements gesehen um den Fehler leichter einzugrenzen und dann das Macro zu korrigieren.
um bei obigen trivialen Beispiel zu bleiben, würde so eine Liste vielleicht so aussehen:
...
;MyMacro(parm1,parm2,label)
IF Parm1>parm2
goto label
elseif parm2<0
goto label
endif
; End MyMaco
...
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ich kann dir deine eigentliche Frage nicht beantworten, du könntest vielleicht mal
im Internationalen Forum fragen, da antworten auch Fred und Freak selber.
was wir hier aber leisten könnten, wäre das Macro-Verständnis zu erleichtern.
vielleicht hast du also ein Code-Beispiel parat, das diese fehlerhafte If-Kette (Verschachtelung?) erzeugt...?
Eventuell resultiert das Problem ja aus einem unvollständigen Verständnis für die Funktionalität von Macros in PB,
oder vielleicht ist es wirklich eine Schwäche im Macro-Parsing selber.
im Internationalen Forum fragen, da antworten auch Fred und Freak selber.
was wir hier aber leisten könnten, wäre das Macro-Verständnis zu erleichtern.
vielleicht hast du also ein Code-Beispiel parat, das diese fehlerhafte If-Kette (Verschachtelung?) erzeugt...?
Eventuell resultiert das Problem ja aus einem unvollständigen Verständnis für die Funktionalität von Macros in PB,
oder vielleicht ist es wirklich eine Schwäche im Macro-Parsing selber.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Danke, ich werde es gelegentlich im internationalen Forum mit der Frage versuchen
. Ich weiß nicht ob ich es erwähnt habe ich kommen von der IBM Z/OS Seite, und da gibt es den IBM Macro Assembler, den ich ziemlich gut beherrscht habe. Gelernt habe ich das auch nicht erst gestern sondern vor 30 Jahren! IT gab es schon lange for Microsoft, und es gibt sie auch immer noch! Nix für ungut für die kleine Spitze
Nun zu den PB Makros. Erstens bin ich mal froh, dass es sowas überhaupt gibt, und zweitens gibt es Schwächen: nun ja den könnte man schon mächtig aufbohren: Macro labels, macro gotos, macro Variablen, das fiele mir aus dem Stehgreif ein. Das würde sicher nicht allzu schwierig sein, aber ich nehme mal an, da kriegt man nicht die Finger rein, oder?
Grüße
Peter
oh, mein Verständnis über Macros ist sehr gutKaeru Gaman hat geschrieben: Eventuell resultiert das Problem ja aus einem unvollständigen Verständnis für die Funktionalität von Macros in PB,
oder vielleicht ist es wirklich eine Schwäche im Macro-Parsing selber.


Nun zu den PB Makros. Erstens bin ich mal froh, dass es sowas überhaupt gibt, und zweitens gibt es Schwächen: nun ja den könnte man schon mächtig aufbohren: Macro labels, macro gotos, macro Variablen, das fiele mir aus dem Stehgreif ein. Das würde sicher nicht allzu schwierig sein, aber ich nehme mal an, da kriegt man nicht die Finger rein, oder?
Grüße
Peter
- 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:
Ich glaube, freak hier im deutschen und im englischen Forum ist der direkte
und bessere Ansprechpartner und könnte Dir im Bezug zu Macros viel mehr
sagen, als wir es können.
PM an freak!
Gruß Falko
und bessere Ansprechpartner und könnte Dir im Bezug zu Macros viel mehr
sagen, als wir es können.
PM an freak!
Gruß Falko
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
PeterJ hat geschrieben:oh, mein Verständnis über Macros ist sehr gut. Ich weiß nicht ob ich es erwähnt habe ich kommen von der IBM Z/OS Seite, und da gibt es den IBM Macro Assembler, den ich ziemlich gut beherrscht habe. Gelernt habe ich das auch nicht erst gestern sondern vor 30 Jahren! IT gab es schon lange for Microsoft, und es gibt sie auch immer noch! Nix für ungut für die kleine Spitze
![]()

ich sagte ausdrücklich: Verständnis für die Funktionalität von Macros in PB
also, um mal den selben Ton anzuschlagen: es ist doch völlig wurscht, woher du etwas über Macros weißt.
solange du die Macros in PB nicht selber implementiert hast, hast du keine Ahnung, wie sie umgesetzt werden,
und aus der Arbeitsweise vom IBM Macro Assembler auf die Funktionsweise der PB Macros zu schließen,
kann dich schlicht und einfach in die Irre führen.
Und wenn du Goto benutzt, kann es mit deinen Kenntnisse über Hochsprachen nicht allzu weit her sein,
also solltest du dir vielleicht wieder nen Assembler zulegen.
Hau nicht so auf die Kacke, nur weil du ebenso lange programmierst wie die meisten von uns!
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Warum muss ich bei dir oft bei Wikipedia nachschlagenKaeru Gaman hat geschrieben:warum müssen eigentlich so viele Leute ein ad hominem wahrnehmen wo keins ist?


Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- 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
Weil Deine Bibliothek anscheinend zu klein istmk-soft hat geschrieben:Warum muss ich bei dir oft bei Wikipedia nachschlagen![]()

Ad Hominem Arguments
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.

Es tut mir wirklich leid, dass ich eine derartige Reaktion erzeugt hatte. Ich wollte weder mit meiner vieljährigen Erfahrung angeben noch habe ich Deine Frage als ein ad hominem empfunden. Ich wollte nur sagen: das Prinzip von Macros ist mir sehr vertraut.
Ach ja das mit den GOTOs habe ich im Kontext mit Macro Erweiterungsideen gebracht, weil dort wegen geringerer Komplexität nicht alle sonstigen Schleifenkonstrukte gebraucht werden.
Als kleines Beispiel wie ich jetzt Macros anwenden muß
hier erzeuge ich zum Compilezeitpunkt 9 Sätze von String, Number und Float Arrays. Wenn ich eine GOTO und Macro Variablen hätte ging es leichter:
das war der Zusammenhang mit dem GOTO, und nicht meine Unkenntnis von Hochsprachen.
Deine Bemerkung bezüglich des Assemblers, nehme ich jetzt einfach als überbordenden Ärger über mich hin.
Ich hatte wirklich nicht Ehrgeiz den großen Zampano zu spielen, deswegen poste ich auch ganz brav im Anfängerforum
Beste Grüße
Peter
Ach ja das mit den GOTOs habe ich im Kontext mit Macro Erweiterungsideen gebracht, weil dort wegen geringerer Komplexität nicht alle sonstigen Schleifenkonstrukte gebraucht werden.
Als kleines Beispiel wie ich jetzt Macros anwenden muß
Code: Alles auswählen
Macro DefAddr(ct)
Global Dim ArrayString#ct#.s(1)
Global Dim ArrayNumber#ct#.i(1)
Global Dim ArrayFloat#ct#.d(1)
EndMacro
Macro DefineAddr(ct)
DefAddr(0)
DefAddr(1)
DefAddr(2)
DefAddr(3)
DefAddr(4)
DefAddr(5)
DefAddr(6)
DefAddr(7)
DefAddr(8)
DefAddr(9)
EndMacro
Code: Alles auswählen
Macro DefAddr(ct)
%count=0 ; compiler set, gibt es nicht
%loop: ; compiler label, gibt es nicht
%count=count+1 ; compiler arithmetik , gibt es nicht
CompilerIf count<=ct
Global Dim ArrayString#ct#.s(1)
Global Dim ArrayNumber#ct#.i(1)
Global Dim ArrayFloat#ct#.d(1)
CompilerGoto %loop ; gibt es auch nicht
CompilerEndIf
EndMacro
Deine Bemerkung bezüglich des Assemblers, nehme ich jetzt einfach als überbordenden Ärger über mich hin.
Ich hatte wirklich nicht Ehrgeiz den großen Zampano zu spielen, deswegen poste ich auch ganz brav im Anfängerforum
Beste Grüße
Peter