Macro definieren

Fragen und Bugreports zur PureBasic 4.0-Beta.
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Macro definieren

Beitrag 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
1. Win10
PB6.1
Benutzeravatar
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

Beitrag 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:
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.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag 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
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag 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
1. Win10
PB6.1
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Gesperrt