Seite 1 von 2

Compiler-Direktiven in Macro => Fehler?

Verfasst: 27.07.2010 18:04
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ß.

Re: Compiler-Direktiven in Macro => Fehler?

Verfasst: 27.07.2010 18:44
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.

Re: Compiler-Direktiven in Macro => Fehler?

Verfasst: 27.07.2010 19:21
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?

Re: Compiler-Direktiven in Macro => Fehler?

Verfasst: 27.07.2010 19:58
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:

Re: Compiler-Direktiven in Macro => Fehler?

Verfasst: 27.07.2010 20:10
von Mok
Ich kann zum Schluss sooft _endif dazuschreiben, wie ich will, der Fehler bleibt immer derselbe.

Re: Compiler-Direktiven in Macro => Fehler?

Verfasst: 27.07.2010 20:26
von NicTheQuick
Dann warten wir lieber mal bis freak sich das anschaut. Der weiß vielleicht eher wieso das passiert.

Re: Compiler-Direktiven in Macro => Fehler?

Verfasst: 27.07.2010 20:30
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

Re: Compiler-Direktiven in Macro => Fehler?

Verfasst: 27.07.2010 20:35
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

Re: Compiler-Direktiven in Macro => Fehler?

Verfasst: 27.07.2010 20:59
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. ^^

Re: Compiler-Direktiven in Macro => Fehler?

Verfasst: 27.07.2010 22:38
von Mok
Ich postes mal ins Bug-Forum.