Seite 1 von 1

Macro definieren

Verfasst: 18.04.2006 00:46
von Toshy
Hallo.

Wo muß bzw. darf ich ein Macro definieren?

Ich habe in Threads LinkedList.struktur() auf die ich an unterschiedlichen Stellen in dem Thread auf die selbe Weise zugreife. Um den Code nicht mehrfach zu schreiben und bei Änderung überall ändern muß bietet sich hier das Macro eher als eine Procedure an, denn man kann eine Procedure nicht innerhalb einer anderen Procedure erstellen.
Soweit ich getestet habe kann man aber problemlos ein Macro in einer PRocedure (Thread) erstellen.
Aber wie funktioniert "intern" das erstellen, der übersicht halber würde ich das Macro gerne direkt im Code, INNERHALB einer Schleife, erstellen und dann an den anderen "Nebenaufrufen" einfach nur zusätzlich aufrufen.
Also in der Art von:
repeat
if x = 1
macro test()
endmacro
test()
elseif x = 2
test()
endif
until 0
Ist dies so möglich OHNE das bei jedem Schleifendurchgang der Code neu eingefügt bzw. das Macro neu erstellt wird?
Da ich mich mit Macros noch nicht auskenne vermute ich bisher, daß der Macrocode beim kompelieren einmalig überall eingefügt wird. Wenn dem so ist, dürfte das problemlos gehen.

Gruß
Toshy

Verfasst: 18.04.2006 01:33
von ts-soft
>> Wo muß bzw. darf ich ein Macro definieren?
Da gelten wohl dieselben Regeln, wie für Proceduren, kommt noch
erschwerend hinzu, das es kein Declare dafür gibt, also am Anfang des
Codes.
Deinen obigen Code verstehe ich nicht, ist auf jedenfall nicht lauffähig, da
total unlogisch :freak:

Verfasst: 18.04.2006 10:18
von Kaeru Gaman
was du vorhast kann niemals funktionieren, du machst einen grundlegenden denkfehler:

Macros werden zur compilezeit durch code ersetzt. in der exe ist also nichts mehr davon zu sehen, ob da mal ein macro war, oder du den code manuell jedesmal hingeschrieben hast.

bedingte macros sind nur durch meta-befehle wie CompilerIf möglich.
auch die haben aber zur laufzeit genau einen zustand, sind nicht variabel.

Verfasst: 18.04.2006 11:09
von remi_meier
@Toshy, wenn ich dich richtig verstanden habe, ist es genau so wie du
es angenommen hast!
Alle Makros müssen einfach vor dem Ort des Benutzens geschrieben
werden. Sie sind aber nicht lokal innerhalb der Prozedur!
Das geht:

Code: Alles auswählen

Repeat 
  If x = 1 
    Macro test()
      Debug 1
    EndMacro 
    test() 
  ElseIf x = 2 
    test() 
  EndIf 
Until 0

Verfasst: 19.04.2006 17:37
von Toshy
@ts-soft
Ist auch kein lauffähig geplanter Code, sondern die Kurzfassung meiner Programmstruktur. Aber wie ich nochmal drauf schaue müßte er so schon laufen. nur halt nichts anzeigen.

@Kaeru Gaman
Ok, dann wird der Code also überall als Kopie eingesetzt. Das ist gut. Aber dann müßte es grundlegend ja funktionieren. Und ich nutze "diese" if ja außerhalb des Macros und sollte dann ja vielleicht trotzdem gehen, wenn es so ist wie du sagst. "remi_meier" scheint aber alles weitere mir zu bestätigen.

@remi_meier
Wenn das stimmt, dann ist es ja super. Dann sind Macros noch viel besser zu nutzen als ich anfangs dachte. Man muß halt nur drauf achten das man den Macrocode vor dem ersten Aufruf einbaut (also Macro und Endmacro einfügt) und das man da es Macros wie du sagst "im Comiler global ersetzt werden" in Proceduren eindeutige "einmalige" Macronamen verwendet werden. Letzteres wußte ich noch nicht und hatte mir da gedanken gemacht.

Danke euch.

Gruß
Thorsten

Verfasst: 25.04.2006 21:30
von Andre
remi_meier hat geschrieben:Alle Makros müssen einfach vor dem Ort des Benutzens geschrieben werden. Sie sind aber nicht lokal innerhalb der Prozedur!
Habe diesen Hinweis in die Hilfe aufgenommen.