Warum kein With in Macros?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
jacdelad
Beiträge: 348
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Warum kein With in Macros?

Beitrag von jacdelad »

Bild

Warum ist With nicht in Macros erlaubt? Die Hilfe sagt nichts dazu.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
Bisonte
Beiträge: 2430
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.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
TroaX
Beiträge: 661
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
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 | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
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: 348
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
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.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
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: 348
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
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.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
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: 2235
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: 348
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
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.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Antworten