Compiler-Direktiven in Macro => Fehler?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Compiler-Direktiven in Macro => Fehler?

Beitrag von Mok »

Hallo.
Machen wir's kurz und schmerzlos: Warum funzt das nicht?

Code: Alles auswählen

Macro _ifdef(Name,Type)
  CompilerIf (Defined(Name,Type))
EndMacro

Macro _ifndef(Name,Type)
  CompilerIf (Defined(Name,Type) ! #True)
EndMacro

Macro _else
  CompilerElse
EndMacro

Macro _endif
  CompilerEndIf
EndMacro

Structure Stack
  *Val
  *Next
EndStructure

_ifndef(Stack,4)
  Debug "Undefined."
_else
  Debug "Defined."
_endif
Gruß.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Compiler-Direktiven in Macro => Fehler?

Beitrag von NicTheQuick »

Die Fehlermeldung sagt es dir doch schon.

Du hast zwei 'CompilerIf's, aber nur ein 'CompilerEndIf'. Ich hätte jetzt zwar auch erwartet, dass es funktioniert, aber scheinbar hat PB andere Prioritäten und verwurschtelt zuerst die 'CompilerX'-Sachen statt den Macros.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Compiler-Direktiven in Macro => Fehler?

Beitrag von Mok »

NicTheQuick hat geschrieben:Du hast zwei 'CompilerIf's, aber nur ein 'CompilerEndIf'
Wo denn?
NicTheQuick hat geschrieben:scheinbar hat PB andere Prioritäten und verwurschtelt zuerst die 'CompilerX'-Sachen statt den Macros.
Versteh' ich nicht ganz... geht sowas als Bug durch?
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Compiler-Direktiven in Macro => Fehler?

Beitrag von NicTheQuick »

Ich formatiere den Code mal so, wie ich denke, dass der PB-Compiler dies tut.

Code: Alles auswählen

Macro _ifdef(Name,Type)
 	CompilerIf (Defined(Name,Type))
	EndMacro

	Macro _ifndef(Name,Type)
			CompilerIf (Defined(Name,Type) ! #True)
			EndMacro

			Macro _else
			CompilerElse
			EndMacro

			Macro _endif
		CompilerEndIf
	EndMacro

	Structure Stack
		*Val
		*Next
	EndStructure

	_ifndef(Stack,4)
		Debug "Undefined."
	_else
		Debug "Defined."
	_endif
Wie du siehst ist am Schluss noch eine Einrückung übrig. :wink:
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Compiler-Direktiven in Macro => Fehler?

Beitrag von Mok »

Ich kann zum Schluss sooft _endif dazuschreiben, wie ich will, der Fehler bleibt immer derselbe.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Compiler-Direktiven in Macro => Fehler?

Beitrag von NicTheQuick »

Dann warten wir lieber mal bis freak sich das anschaut. Der weiß vielleicht eher wieso das passiert.
Kevin
Beiträge: 236
Registriert: 11.06.2007 12:55

Re: Compiler-Direktiven in Macro => Fehler?

Beitrag von Kevin »

so gehts: da purebasic die compiler befehle vor den macros bearbeitet

Code: Alles auswählen

Macro _ifdef(Name,Type)
  CompilerIf (Defined(Name,Type))
EndMacro

Macro _ifndef(Name,Type)
  CompilerIf (Defined(Name,Type) ! #True)
EndMacro

Macro _else
  CompilerElse
EndMacro

Macro _endif
  CompilerEndIf
EndMacro

Structure Stack
  *Val
  *Next
EndStructure

_ifndef(Stack,4)
  Debug "Undefined."
_else
  Debug "Defined."
_endif

CompilerEndif
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Compiler-Direktiven in Macro => Fehler?

Beitrag von CSHW89 »

hm, ne da stimmt was nicht. ist denk ich ein bug. das funktioniert:

Code: Alles auswählen

Macro _ifndef
  CompilerIf #True
EndMacro

Macro _endif
  CompilerEndIf
EndMacro

_ifndef
  Debug "Undefined."
_endif
wenn aber statt #True, #False steht, funktionierts nicht mehr

lg kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Compiler-Direktiven in Macro => Fehler?

Beitrag von NicTheQuick »

Dann mal wieder meine bescheidene Meinung dazu.

Erster Fall:

Code: Alles auswählen

Macro _ifndef
  CompilerIf #True
EndMacro

Macro _endif
  CompilerEndIf
EndMacro

_ifndef
  Debug "Undefined."
_endif
Der Compiler kompiliert und macht daraus folgendes:

Code: Alles auswählen

Macro _ifndef   ;Macro-Defintion beginnt
  ;CompilerIf #True    ;ok, das ist #True, also gehört alles danach bis 'CompilerEndIf' noch dazu
EndMacro  ;Macro wurde beendet, besteht also nur aus 'CompilerIf #True'

Macro _endif ;Macro-Defintion beginnt
  ;CompilerEndIf     ;Ende der Bedingung. Alles danach gehört sowieso dazu.
EndMacro ;Macro wurde beendet, besteht jetzt aus 'CompilerEndIf'

;CompilerIf #True ;Das Macro '_ifndef' wurde durch seine Definition ersetzt
  Debug "Undefined."
;CompilerEndIf ;Das Macro _endif wurde ersetzt
Zweiter Fall:

Code: Alles auswählen

Macro _ifndef
  CompilerIf #False
EndMacro

Macro _endif
  CompilerEndIf
EndMacro

_ifndef
  Debug "Undefined."
_endif
Wird zu:

Code: Alles auswählen

Macro _ifndef   ;Macro-Defintion beginnt
  ;CompilerIf #False    ;ok, das ist #False, also gehört alles danach bis 'CompilerEndIf' nicht dazu
;EndMacro  ;fällt weg

Macro _endif ;fällt weg
  ;CompilerEndIf     ;Ende der Bedingung. Alles danach gehört sowieso dazu.
EndMacro ;Macro wurde beendet, besteht jetzt aus 'CompilerIf #False' und 'CompilerEndIf'

;CompilerIf #False
;CompilerEndIF  ;Das Macro '_ifndef' wurde durch seine Definition ersetzt
  Debug "Undefined."
;_endif    ;Diese Macro wurde nirgendwo definiert
Hm.. ist aber auch irgendwie komisch. ^^
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Compiler-Direktiven in Macro => Fehler?

Beitrag von Mok »

Ich postes mal ins Bug-Forum.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Antworten