Seite 1 von 2

Warum kein With in Macros?

Verfasst: 10.12.2021 06:07
von jacdelad
Bild

Warum ist With nicht in Macros erlaubt? Die Hilfe sagt nichts dazu.

Re: Warum kein With in Macros?

Verfasst: 10.12.2021 08:35
von Bisonte
"With" ist mehr oder weniger selbst ein Macro...

Re: Warum kein With in Macros?

Verfasst: 10.12.2021 15:54
von TroaX
Dies ist eine Compiler-Direktive und funktioniert ähnlich wie ein Makro
Soweit ich weiß funktionieren Compiler-Direktiven generell nicht in Makros. Zumindest soweit "ICH" weiß ;)

Ich finde den Hilfetext halt trotzdem blöd. With ist überall ein Kontext-Keyword bzw. Operator. Und lustigerweise ist es diesmal in PureBasic auch nichts anderes. Nur eben bezogen auf Strukturen.

Re: Warum kein With in Macros?

Verfasst: 10.12.2021 19:50
von berie
Vielleicht liegt es daran, dass With...Endwith nicht verschachtelt werden kann ?
Wenn man ein Macro in einem With...Endwith-Block aufruft, ist das verschachtelt.
Ich kann das auch nur vermuten.

Re: Warum kein With in Macros?

Verfasst: 10.12.2021 22:46
von jacdelad
Hm, alles logisch und auch nicht...
Verschachteln könnte ich es auch in Prozeduren, Compilerdirektiven in Makros nicht zuzulassen finde ich auch nicht wirklich sinnvoll und dass es selbst wie ein Macro funktioniert sollte dem keinen Abbruch tun, weil das doch eigentlich auch gehen sollte.
Aber gut, dann isses halt so.

Re: Warum kein With in Macros?

Verfasst: 10.12.2021 23:00
von berie
Wie willst du With...Endwith in Prozeduren verschachteln ?
Prozeduren werden so ausgeführt "wie sie da stehen".
Macros hingegen werden expandiert, d.h. Macroaufrufe werden vor dem compilieren durch das Macro 1:1 ersetzt.

Bin zu müde, das jetzt ausführlich zu erklären zu versuchen - sorry.

Re: Warum kein With in Macros?

Verfasst: 11.12.2021 00:13
von jacdelad
Ich weiß schon und ich glaube nicht, dass ich geschrieben habe, dass ich With verschachteln will. Ich meinte damit, dass ich es in einer Prozedur ebenfalls verschachteln könnte. Somit müsste das auch verboten sein.

Aber gut, ist halt wie's ist.

Re: Warum kein With in Macros?

Verfasst: 11.12.2021 09:25
von STARGÅTE
Du verwechselst da was.
Ein Macro oder CompilerIf ist ein Kompiler-Konstrukt, dass heißt, der Macro-Code wird an Ort und Stelle eingefügt, sodass das With z.B. mitten in einem anderen With landen könnte usw.
Eine Prozedur ist ein Laufzeit-Konstrukt, dass heißt, der Prozedur-Code wird nicht eingefügt, sondern bleibt im Definitionsteil und wird erst zur Laufzeit aufgerufen.

Re: Warum kein With in Macros?

Verfasst: 11.12.2021 11:33
von #NULL
Es geht nicht nur um den 'Aufruf' von With in einem Macro Body. Eventuell definiert With ein temporäres Macro um halt \ mit x\ zu ersetzen. Du hättest dann also eine Macro Definition in einer Macro Definition. Ob With nun ein richtiges Macro ist oder nur bestimmte Funktionen des Compilers verwendet, die sonst für Macros da sind, ist eine andere Frage, aber so stell ich mir das vor.

Re: Warum kein With in Macros?

Verfasst: 11.12.2021 22:16
von jacdelad
Nein, ich verwechsel da nichts und weiß ganz genau wie das funktioniert.
Aber was ist, wenn ich:

Code: Alles auswählen

Define MyVar.POINT

Procedure MyProc()
  With MyVar
  If Random(2)
    EndWith
  EndIf
EndProcedure

While #True
  MyProc()
EndWhile
Ich kann es gerade nicht testen, aber das dürfte zu einem Laufzeitfehler führen. Ob der Code in einer Procedure ist oder per Macro reinkopiert wird...pff.