'CompileIf Defined(Nom,Type)' plus poussé

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

'CompileIf Defined(Nom,Type)' plus poussé

Message par Lna »

Bonjour,

'CompileIF Defined(Nom,Type)' manque de détails.
Ce serait bien de pouvoir pousser l'analyse jusqu'au type de variable que l'on souhaite autoriser ou non. (un paramètre facultatif)

En plus de #PB_Constant et #PB_Variable, avoir un #PB_Numérique et un #PB_Chaine même en Anglais serait bienvenue pour le futur.

Merci.

A +
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Une autre demande, lorsque l'on veut compiler plusieurs constantes ou variables ou autre, il faut mettre un compilerif avec un defined pour chaque élément, on pourrait avoir une seule commande qui prend en compte chaque élément d'un bloc d'énumération et complile chaque élément s'il n'est pas défini par exemple (je dit bien que chaque élément est traité individuellement)

Code : Tout sélectionner

CompilerIf Defined(Constante1, #PB_Constant) = #False
  #Constante1 = 10
CompilerEndIf
  
CompilerIf Defined(Constante2, #PB_Constant) = #False
  #Constante2 = 20 
CompilerEndIf
  
CompilerIf Defined(Constante3, #PB_Constant) = #False
  #Constante3 = 30
CompilerEndIf
  
CompilerIf Defined(Constante4, #PB_Constant) = #False
  #Constante4 = 40
CompilerEndIf
  
CompilerIf Defined(Constante5, #PB_Constant) = #False
  #Constante5 = 50
CompilerEndIf
  
CompilerIf Defined(Constante6, #PB_Constant) = #False
  #Constante6 = 60
CompilerEndIf


à remplacer par quelque chose comme ça

Code : Tout sélectionner

CompilerIf Defined(EnumerationBlock, #PB_Constant) = #False
  #Constante1 = 10
  #Constante2 = 20
  #Constante3 = 30
  #Constante4 = 40
  #Constante5 = 50
  #Constante6 = 60
CompilerEndIf
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

purebasic autorise déjà définir plus fois les constantes.
sinon avec les macros on peut faire des choses intéressantes.
mais pour ta demande, lna, il n'y a pas de solution autre que Fred...

ex :

Code : Tout sélectionner

Macro DefineConstant(x, y)
  CompilerIf Defined(x, #PB_Constant) = #False 
    #x = y
  CompilerEndIf 
EndMacro

DefineConstant(Constante1, 10)
DefineConstant(Constante1, 10)
DefineConstant(Constante1, 10)
DefineConstant(Constante1, 10)
DefineConstant(Constante2, 20)
DefineConstant(Constante3, 30)
DefineConstant(Constante4, 40)
DefineConstant(Constante5, 50)
DefineConstant(Constante6, 60)

Enumeration 1
  #PB_Gadget_FrontColor
  #PB_Gadget_BackColor
  #PB_Gadget_LineColor
  #PB_Gadget_TitleFrontColor
  #PB_Gadget_TitleBackColor
  #PB_Gadget_GrayTextColor  
EndEnumeration

Enumeration 1
  #PB_Gadget_FrontColor
  #PB_Gadget_BackColor
  #PB_Gadget_LineColor
  #PB_Gadget_TitleFrontColor
  #PB_Gadget_TitleBackColor
  #PB_Gadget_GrayTextColor  
EndEnumeration

Debug #PB_Gadget_LineColor
Debug #Constante4
Image
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Merci Flype pour le bout de code :D

C'est dommage de devoir écrire des macros pour ce qui n'est que des directives de compilation.

J'ai mis un exemple avec des constantes mais mon vrai problème c'est les structures, mais c'était plus simple un exemple avec des constantes
Répondre