宏元编程——算数计算——ADD,SUB,MUL

来源:互联网 发布:淘宝女装店知乎推荐 编辑:程序博客网 时间:2024/05/29 18:28

TL_ADD和TL_SUB可以由基本数据结构TL_TUPLE,流程控制TL_WHILE和算数计算TL_INC,TL_DEC组合实现。


TL_ADD实现如下:

#define TL_ADD(p1,p2) TL_TUPLE_ELEM(0, \<span style="white-space:pre"></span>TL_WHILE(TL_ADD_P,TL_ADD_OP,(p1,p2)) \<span style="white-space:pre"></span>) \#define TL_ADD_P(r, state) TL_TUPLE_ELEM(1,state)#define TL_ADD_OP(r, state) \<span style="white-space:pre"></span>( \<span style="white-space:pre"></span>TL_INC(TL_TUPLE_ELEM(0,state)), \<span style="white-space:pre"></span>TL_DEC(TL_TUPLE_ELEM(1,state)) \<span style="white-space:pre"></span>) \

TL_SUB实现如下:

#define TL_SUB(p1,p2) TL_TUPLE_ELEM(0, \TL_WHILE(TL_SUB_P,TL_SUB_OP,(p1,p2)) \) \#define TL_SUB_P(r, state) TL_TUPLE_ELEM(1,state)#define TL_SUB_OP(r, state) \( \TL_DEC(TL_TUPLE_ELEM(0,state)), \TL_DEC(TL_TUPLE_ELEM(1,state)) \) \

TL_MUL实现如下:

#define TL_MUL(p1,p2)  TL_TUPLE_ELEM( \2, \TL_WHILE(TL_MUL_P,TL_MUL_OP,(p1,p2,0)))#define TL_MUL_P(r, state) TL_TUPLE_ELEM(1,state)#define TL_MUL_OP(r, state) \( \TL_TUPLE_ELEM(0,state), \TL_DEC(TL_TUPLE_ELEM(1,state)), \<span style="color:#ff0000;">TL_ADD_D</span>( \TL_TUPLE_ELEM(2,state),  \TL_TUPLE_ELEM(0,state)), \)
注意上面红色标注的宏TL_ADD_D,这个地方没有用TL_ADD。主要原因是宏不能重入。TL_ADD里面在实现的时候会用到TL_WHILE。TL_MUL本身也会用到TL_WHILE,这会导致内层的TL_WHILE不会展开。具体如何用比较优雅的方法处理重入见宏元编程——谈谈宏的重入机制——TL_WHILE优化



0 0
原创粉丝点击