Seite 1 von 2
Code mit aufgelösten Macro Calls
Verfasst: 12.07.2009 09:33
von PeterJ
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
Verfasst: 13.07.2009 00:41
von Falko
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:
- 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
Und bei Macros wird ein Fenster angezeigt, wenn dieser fehlerhaft ist.
Meinst du das mit aufgelösten Assembler bzw. Macro?
Gruß Falko
Verfasst: 13.07.2009 07:35
von PeterJ
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
...
Verfasst: 13.07.2009 11:29
von Kaeru Gaman
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.
Verfasst: 13.07.2009 13:25
von PeterJ
Danke, ich werde es gelegentlich im internationalen Forum mit der Frage versuchen
Kaeru 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.
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
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
Verfasst: 13.07.2009 14:08
von Falko
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
Verfasst: 13.07.2009 15:12
von Kaeru Gaman
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

warum müssen eigentlich so viele Leute ein ad hominem wahrnehmen wo keins ist?
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!
Verfasst: 13.07.2009 16:01
von mk-soft
Kaeru Gaman hat geschrieben:

warum müssen eigentlich so viele Leute ein ad hominem wahrnehmen wo keins ist?
Warum muss ich bei dir oft bei Wikipedia nachschlagen

Verfasst: 13.07.2009 16:07
von ts-soft
mk-soft hat geschrieben:Warum muss ich bei dir oft bei Wikipedia nachschlagen

Weil Deine Bibliothek anscheinend zu klein ist
Ad Hominem Arguments
Verfasst: 13.07.2009 16:52
von PeterJ
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ß
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
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:
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
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