marlin2.0 宏定义笔记

#define TERN_(O,A)          _TERN(_ENA_1(O),,A)     // OPTION ? 'A' : '<nul>'

#define _TERN(E,V...)       __TERN(_CAT(T_,E),V)    // Prepend 'T_' to get 'T_0' or 'T_1'

#define __TERN(T,V...)      ___TERN(_CAT(_NO,T),V)  //

#define ___TERN(P,V...)     THIRD(P,V)              // If first argument has a comma, A. Else B.

#define THIRD(a,b,c,...)   c

#define _ENA_1(O)           _ISENA(CAT(_IS,CAT(ENA_, O)))

#define _ISENA(V...)        IS_PROBE(V)

#define IS_PROBE(V...)   SECOND(V, 0)     // Get the second item passed, or 0

#define SECOND(a,b,...)  b

#define CAT(a,V...)            _CAT(a,V)

#define _CAT(a,V...)          a##V

那么TERN_(HAS_FAST_MOVES, parser.codenum == 0)

=_TERN(_ENA_1(HAS_FAST_MOVES),,parser.codenum == 0)

= __TERN(_CAT(T_,_ENA_1(HAS_FAST_MOVES),)

= ___TERN(_CAT(_NO,_CAT(T_,_ENA_1(HAS_FAST_MOVES)),)

=THIRD(_CAT(_NO,_CAT(T_,_ENA_1(HAS_FAST_MOVES)),)

=THIRD(_CAT(_NO,_CAT(T_, _ISENA(CAT(_IS,CAT(ENA_,HAS_FAST_MOVES))))))

=THIRD(_CAT(_NO,_CAT(T_, _ISENA(CAT(_IS,ENA_HAS_FAST_MOVES)))))

=THIRD(_CAT(_NO,_CAT(T_, _ISENA(_ISENA_HAS_FAST_MOVES))))

=THIRD(_CAT(_NO,_CAT(T_,IS_PROBE(_ISENA_HAS_FAST_MOVES))))

=THIRD(_CAT(_NO,_CAT(T_,SECOND(_ISENA_HAS_FAST_MOVES))))

=THIRD(_CAT(_NO,_CAT(T_,0)))

=THIRD(_CAT(_NO,T_0))

=THIRD(_NOT_0)

=THIRD(~,1)

=0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值