J'ai une macro capricieuse:
Code : Tout sélectionner
Macro Bissex(x): (Equ((x % 4), 0) & ((1 - Equ((x % 100), 0) ) | Equ(((x >> 2) % 100), 0) ) ): EndMacro
Un détail qui s'ajoute : cette macro contient des appels de la procédure Equ(a, b)
Code : Tout sélectionner
Procedure.L Equ(a, b)
Protected s.L
s = 0: If a = b: s = 1: EndIf
ProcedureReturn s
EndProcedure
L'équivalent fonctionnel de la macro Bissex() est la procédure du même nom.(Je ne fais pas cohabiter les 2 dans le même code)
Code : Tout sélectionner
Procedure.L Bissex(x.L)
Protected Result.L
Result = ((1 - Equ((x % 100), 0) ) | Equ(((x >> 2) % 100), 0) ) & Equ((x % 4), 0)
ProcedureReturn Result
EndProcedure
Code : Tout sélectionner
Macro BissexBug(x): (Equ((x % 4), 0) & ((1 - Equ((x % 100), 0) ) | Equ(((x >> 2) % 100), 0) ) ): EndMacro
Macro Bissex_Ok(x): ((1 - Equ((x % 100), 0) ) | Equ(((x >> 2) % 100), 0) ) & Equ((x % 4), 0): EndMacro
Code : Tout sélectionner
Procedure.L Equ(a, b)
Protected s.L
s = 0: If a = b: s = 1: EndIf
ProcedureReturn s
EndProcedure
Macro Bissex(x): (Equ((x % 4), 0) & ((1 - Equ((x % 100), 0) ) | Equ(((x >> 2) % 100), 0) ) ): EndMacro
Macro BissexOk(x): ((1 - Equ((x % 100), 0) ) | Equ(((x >> 2) % 100), 0) ) & Equ((x % 4), 0): EndMacro
; VOICI 2 ALGOS IDENTIQUES A PEU DE CHOSE PRES MAIS...
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
i = 1900
Variable.L = 0
Variable = Bissex(i) + Variable
Debug Str(Variable) + " = " + Str(Bissex(i) )
i = 1900
Variable.L = 0
Variable = Variable + Bissex(i) ; <<<< ON INVERSE LES 2 MEMBRES ET CA BUGUE
Debug Str(Variable) + " = " + Str(Bissex(i) )