Makro mit CompilerIf als Code

Für allgemeine Fragen zur Programmierung mit PureBasic.
DePe
Beiträge: 194
Registriert: 26.11.2017 16:17

Makro mit CompilerIf als Code

Beitrag 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()
Benutzeravatar
chi
Beiträge: 90
Registriert: 17.05.2007 09:30
Wohnort: Austria

Re: Makro mit CompilerIf als Code

Beitrag 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...
DePe
Beiträge: 194
Registriert: 26.11.2017 16:17

Re: Makro mit CompilerIf als Code

Beitrag 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
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Makro mit CompilerIf als Code

Beitrag von Nino »

freak hat diese Problematik hier gut erklärt.
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Re: Makro mit CompilerIf als Code

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Makro mit CompilerIf als Code

Beitrag 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.
DePe
Beiträge: 194
Registriert: 26.11.2017 16:17

Re: Makro mit CompilerIf als Code

Beitrag 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
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Re: Makro mit CompilerIf als Code

Beitrag von #NULL »

my pb stuff..
Bild..jedenfalls war das mal so.
Antworten