实现思路:宏展开无法在预编译期完成“真正”的算数计算,但是我们可以定义一张静态表,例如:遇到INC(5)就替换成 6,遇到DEC(8)就替换成7。
TL_INC实现:
#include "tl/cat.h"
#define TL_INC(n) TL_CAT(TL_INC_,n)
#define TL_INC_0 1
#define TL_INC_1 2
#define TL_INC_2 3
#define TL_INC_3 4
#define TL_INC_4 5
#define TL_INC_5 6
#define TL_INC_6 7
#define TL_INC_7 8
#define TL_INC_8 9
#define TL_INC_9 10
#define TL_INC_10 11
#define TL_INC_11 12
#define TL_INC_12 13
#define TL_INC_13 14
#define TL_INC_14 15
#define TL_INC_15 16
#define TL_INC_16 17
#define TL_INC_17 18
#define TL_INC_18 19
#define TL_INC_19 20
#define TL_INC_20 21
#define TL_INC_21 22
TL_DEC实现:
#include "tl/cat.h"
#define TL_DEC(n) TL_CAT(TL_DEC_,n)
#define TL_DEC_1 0
#define TL_DEC_2 1
#define TL_DEC_3 2
#define TL_DEC_4 3
#define TL_DEC_5 4
#define TL_DEC_6 5
#define TL_DEC_7 6
#define TL_DEC_8 7
#define TL_DEC_9 8
#define TL_DEC_10 9
#define TL_DEC_11 10
#define TL_DEC_12 11
测试结果:
TL_INC(9) =>10
TL_DEC(9) =>8