AX宏Macros运算

先给个例子

static void MacrosCalc(Args _args)
{
    #define.test(10)    
    #defdec.test
    int i;
    ;
    print info(strfmt("%1",#test));
    #defdec.test
    print info(strfmt("%1",#test));
    #defdec.test
    print info(strfmt("%1",#test));
    for(i=1;i<=3;i++)
    {
        #defdec.test
        print info(strfmt("%1",#test));
    }
}

按照平常的变量计算逻辑,输出结果应该是

10,9,8,7,6,5

但实际的输出结果是

9,8,7,6,6,6

这个就有点想不通了,第一句Print之前没有执行defdec,却自减了,而for循环执行了三次defdec,却只减了一次?

这就是变量和常量的区别了

我们常用的是变量,导致用变量的思维来处理常量

正确的常量Macros计算并不是在运行时计算的

很简单的测试,跟踪一下这个脚本就会发现,defdec根本就跟踪不到,也就是没有运行

系统对Macros的计算处理是在编译的时候就生成了

也就是说系统在编译时,见到defdec,就是对#test进行了自减,生成新的常量

原文地址:https://www.cnblogs.com/rumenren/p/4929235.html