Warum kein With in Macros?
- 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?
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
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
Re: Warum kein With in Macros?
"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
- 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?
Soweit ich weiß funktionieren Compiler-Direktiven generell nicht in Makros. Zumindest soweit "ICH" weißDies ist eine Compiler-Direktive und funktioniert ähnlich wie ein Makro
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
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
-
- 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?
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.
Wenn man ein Macro in einem With...Endwith-Block aufruft, ist das verschachtelt.
Ich kann das auch nur vermuten.
formerly known as bizzl
- 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?
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.
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
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
-
- 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?
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.
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
- 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?
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.
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
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
Re: Warum kein With in Macros?
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.
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Warum kein With in Macros?
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.
- 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?
Nein, ich verwechsel da nichts und weiß ganz genau wie das funktioniert.
Aber was ist, wenn ich:
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.
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
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
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