Seite 1 von 1

Makro mit CompilerIf als Code

Verfasst: 21.02.2020 12:00
von DePe
Ich möchte für ein eigenes Debugsystem, ein Makro nur mit dem Code "CompilerIf ..." verwenden. Ich bekomme aber immer einen Compiler-Fehler. Gibt es da eine Lösung, oder wird das "CompilerIf ..." ausgeführt und nicht nur im Code eingefügt? Wenn beide Teile CompilerIf/EndIf vorhanden sind gibt es keine Fehler.

Peter

Edit:
Ich vermute es wird immer auf ein CompilerIf/EndIf-Paar geprüft. Also innerhalb eines Makros, Prozedur oder Modul.

Code: Alles auswählen

EnableExplicit

;#fDebug = 1    ; Ohne Fehler, mit Debugausgabe.
#fDebug = 0    ; [COMPILER] Line 23: 'CompilerIf' without 'CompilerEndIf'.

Macro DebugIf
    CompilerIf #fDebug
EndMacro

Macro DebugEndIf
    CompilerEndIf
EndMacro

Macro DebugIfEndIf
    CompilerIf #fDebug
    Debug "If und EndIf gemeinsam."
    CompilerEndIf   
EndMacro

Procedure Test()
    DebugIf
    Debug "If und EndIf getrennt."
    DebugEndIf
    
    DebugIfEndIf
EndProcedure

Test()

Re: Makro mit CompilerIf als Code

Verfasst: 21.02.2020 21:27
von chi
Compiler Direktiven hat geschrieben:Wenn das Ergebnis des <Konstanten Ausdrucks> wahr ergibt, wird der Programmcode innerhalb des 'If' Abschnitts kompiliert, andernfalls wird er total ignoriert.
Sobald die Konstante 0 ergibt, werden Compiler Direktiven aus dem Code gelöscht...

Re: Makro mit CompilerIf als Code

Verfasst: 22.02.2020 00:05
von DePe
Das bedeutet, ein Makro auflösen und das Kompilieren passiert sozusagen gleichzeitig, Zeile für Zeile. Denn wenn ich das "CompilerEndIf" in die Prozedur einfüge, gibt es keinen Fehler beim Kompilieren.

Code: Alles auswählen

Procedure Test()
    DebugIf
    Debug "If und EndIf getrennt."
    DebugEndIf
    CompilerEndIf
    
    DebugIfEndIf
EndProcedure
Peter

Re: Makro mit CompilerIf als Code

Verfasst: 22.02.2020 12:16
von Nino
freak hat diese Problematik hier gut erklärt.

Re: Makro mit CompilerIf als Code

Verfasst: 22.02.2020 13:28
von #NULL
Das erklärt aber nicht warum ich beim ersten Ausführen des Codes einen anderen Fehler erhalte, als nach Ändern der 0 in 1 und anschließendem Undo.

Code: Alles auswählen

Zeile 29: 'CompilerIf' without 'CompilerEndIf'.

Code: Alles auswählen

Zeile 23: 'CompilerEndIf' without 'CompilerIf'.
- IDE öffnen, paste code, run -> erster Fehler
- 0 in 1 ändern, run, läuft, undo, run -> zweiter Fehler

Re: Makro mit CompilerIf als Code

Verfasst: 22.02.2020 14:04
von Nino
#NULL hat geschrieben:Das erklärt aber nicht warum ich beim ersten Ausführen des Codes einen anderen Fehler erhalte, als nach Ändern der 0 in 1 und anschließendem Undo.
Problem bestätigt mit PB 5.71 x64 unter Windows.
Offenbar eine Macke im Compiler oder in der IDE.

Re: Makro mit CompilerIf als Code

Verfasst: 22.02.2020 14:22
von DePe
Nino hat geschrieben:freak hat diese Problematik hier gut erklärt.
Danke Nino für den Link.
Ich werde dann nur das "CompilerIf" in einem Makro verwenden, damit komme ich zurecht.

Peter

Re: Makro mit CompilerIf als Code

Verfasst: 22.02.2020 14:53
von #NULL