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

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优化



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值