Warum kein With in Macros?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Warum kein With in Macros?

Beitrag von jacdelad »

Bild

Warum ist With nicht in Macros erlaubt? Die Hilfe sagt nichts dazu.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Warum kein With in Macros?

Beitrag von Bisonte »

"With" ist mehr oder weniger selbst ein Macro...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Warum kein With in Macros?

Beitrag 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.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
berie
Beiträge: 75
Registriert: 17.01.2018 08:52
Computerausstattung: Windows 11 64 bit, i7, 16GB RAM
Wohnort: Wesertal in Nordhessen

Re: Warum kein With in Macros?

Beitrag 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.
formerly known as bizzl
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Warum kein With in Macros?

Beitrag 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.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
berie
Beiträge: 75
Registriert: 17.01.2018 08:52
Computerausstattung: Windows 11 64 bit, i7, 16GB RAM
Wohnort: Wesertal in Nordhessen

Re: Warum kein With in Macros?

Beitrag 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.
formerly known as bizzl
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Warum kein With in Macros?

Beitrag 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.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Warum kein With in Macros?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Re: Warum kein With in Macros?

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: Warum kein With in Macros?

Beitrag 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.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Antworten