[v4 beta1] Macro et condition!

Archive.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

[v4 beta1] Macro et condition!

Message par nico »

J'ai un problème avec ce code, je pense que PB ne devrait pas me renvoyer d'erreur! :?

Là, ça ne marche pas, j'ai une erreur malgré le test de condition:

Code : Tout sélectionner

variable.l=%0110101

Macro Bit(valeur,Numero_du_bit)
  masque=1
  If Numero_du_bit 
    test=valeur & (masque << Numero_du_bit)  ;(1 à 7)
    Else
    test=valeur & masque
  EndIf 
EndMacro 

bit(variable,0)
Debug test

alors que logiquement si je fais le travail de la macro; ça devrait me donner ça:

Code : Tout sélectionner

  Numero_du_bit=0
  
  variable.l=%0110101
  valeur=  variable
  
  masque=1
  If Numero_du_bit 
    test=valeur & (masque << Numero_du_bit)  ;(1 à 7)
    Else
    test=valeur & masque
  EndIf 
  
  Debug test
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Oué c'est bizard...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

Ce n’est pas vraiment une erreur, c’est a cause de l’optimisation du code par Pure.

Dans ton exemple, PB peut substituer directement le pseudo variable Numero_du_bit par la constante 0 avant compilation ce qui lui pose problème par la suite avec l’opérateur <<.

Le code suivant, par contre, fonctionne correctement.

Code : Tout sélectionner

variable.l=%0110101

Macro Bit(valeur, Numero_du_bit=1)
  masque=1
  If Numero_du_bit
    test=valeur & (masque << Numero_du_bit)  ;(1 à 7)
    Else
    test=valeur & masque
  EndIf
EndMacro

a = 0
bit(variable,a)
Debug test
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Y'a quand meme un truc bizarre, je vais regarder.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Même si y a un truc qui va pas, c'est drolement bien vu Dräc! :)
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Il est vachement prudent le compilateur, au cas où un "If 0" arriverait à passer en force il te prévient que tu peux pas faire le décalage :)
Vive le thread-safe !
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

C'est pas si évident de faire une macro, question d'habitude sans doute, mais le problème c'est que le compilateur ne t'indique pas la ligne qui pose problème dans la macro, il reste sur la ligne d'appel de la macro; alors je patoge pas mal.

T'as bien un message d'erreur mais ce n'est pas très clair, du moins pour moi!

genre: "cette commande ne peut pas porté ce même nom car cette une commande de pure :if "

évidemment le if que j'ai mis n'est pas une commande mais bien un if..!!!
Répondre