记一个宏定义写法#define HT_FIND(name, head, elm) name##_HT_FIND((head), (elm))

记一个宏定义写法

最近在看libevent源码,看到一个有趣的宏写法。特此记录。方便日后巩固学习。

源码写法:

#define HT_FIND(name, head, elm)   name##_HT_FIND((head), (elm))

首先来简单分析一下:

  1. 定睛一看是一个宏,##是连接符

  2. 在vscode鼠标悬停该宏调用处,就清晰明了了

    // 源码
    dent = HT_FIND(event_debug_map, &global_debug_map, &find);
    
    // 鼠标悬停在宏上查看扩展,扩展如下
    #define HT_FIND(name,head,elm) name ## _HT_FIND((head), (elm))
    扩展到:
    event_debug_map_HT_FIND((&global_debug_map), (&find))
    

接下来模仿该写法写个例子:

#define FUNC(name, value1, value2) name##_INT((value1), (value2))

int add_INT(int a, int b)
{
    cout << "add = " << a + b << endl;
    return a + b;
}

int mul_INT(int a, int b)
{
    cout << "mul = " << a * b << endl;
    return a * b;
}

int sub_INT(int a, int b)
{
    cout << "sub = " << a - b << endl;
    return a - b;
}

int main()
{
    FUNC(add, 9, 2);
    FUNC(mul, 9, 2);
    FUNC(sub, 9, 2);
    return 0;
}

输出结果:

add = 11
mul = 18
sub = 7

我相信看完例子你就明白这种写法了。非常方便。仔细看看是不是这个宏的调用有点像线程定义的写法。比如说我们定义一个相加功能的线程:

thread t1{add, 1, 6};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值