浅析uthash系列之二:宏函数

本文深入浅出地介绍了uthash的宏函数使用,包括API宏和内部宏。API宏分为快捷和一般两种,适用于不同数据类型的key。内部宏涉及api支持、bucket操作、hash算法等多个类别,详细阐述了uthash的内部工作机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

uthash版本 :2.0.2
作者:jafon.tian
转载请注明出处:https://blog.youkuaiyun.com/JT_Notes

简要说明

uthash是采用宏函数来完成hash表功能。总体上可以分为两大类:
1. API宏函数
2. 内部宏函数

总图

API宏函数

uthash提供了两大类对外API宏函数:
1. 快捷宏函数。快捷宏可以操作key数据类型是整数,指针或字符串的hash表(需要将UT_hash_handle名称取为hh)。快捷宏比一般宏使用更少的参数,对那些采用一般数据类型做key的情形使用起来会简单一些。
2. 一般宏函数。一般宏定义可以被用在key不是一般数据类型或者是多个成员组合或者UT_hash_handle名称不是hh的情形。这些宏需要更多的参数,因而也提供了更大的灵活性。

如果快捷宏已经可以满足你的需要,那就使用快捷宏,这样会使你的代码更具可读性。

  • 便捷宏定义
名称 参数及简要说明
HASH_ADD_INT (head, intfield, add)
基于HASH_ADD的类型定制宏,key类型为int,key大小为sizeof(int)
HASH_ADD(hh,head,intfield,sizeof(int),add)
HASH_REPLACE_INT (head, intfield, add, replaced)
基于HASH_REPLACE的类型定制宏,key类型为int,key大小为sizeof(int)
HASH_REPLACE(hh,head,intfield,sizeof(int),add,replaced)
HASH_FIND_INT (head, findint, out)
基于HASH_FIND的类型定制宏,key类型为int,key大小为sizeof(int)
HASH_FIND(hh,head,findint,sizeof(int),out)
HASH_ADD_STR (head, strfield, add)
基于HASH_ADD的类型定制宏,key类型为char [ ] ,key大小使用uthash_strlen计算
HASH_REPLACE_STR (head, strfield, add, replaced)
基于HASH_REPLACE的类型定制宏,key类型为char [ ] ,key大小使用uthash_strlen计算
HASH_FIND_STR (head, findstr, out)
基于HASH_FIND的类型定制宏,key类型为char [ ] ,key大小使用uthash_strlen计算
HASH_ADD_PTR (head, ptrfield, add)
基于HASH_ADD的类型定制宏,key类型为指针,key大小为sizeof(void *)
HASH_REPLACE_PTR (
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值