源码路径有头文件,/mosquitto/mosquitto-1.5.4/src/deps/uthash.h

来源于http://troydhanson.github.io/uthash/

GitHub源码:https://github.com/troydhanson/uthash

使用说明:http://troydhanson.github.io/uthash/userguide.html

This software supports these operations on items in a hash table:

add/replace

find

delete

count

iterate

sort

ITER==iterator,遍历

#define HASH_ITER(hh,head,el,tmp)                                                \
for((el)=(head),(tmp)=DECLTYPE(el)((head)?(head)->hh.next:NULL);                 \
  el; (el)=(tmp),(tmp)=DECLTYPE(el)((tmp)?(tmp)->hh.next:NULL))
#endif

for 循环语句的一般形式为:

for (表达式1; 表达式2; 表达式3)
{
        语句;
}

首先要强调两点:
1) 表达式1、表达式2和表达式3之间是用分号;隔开的,千万不要写成逗号。

2) for(表达式1;表达式2;表达式3)的后面千万不要加分号,很多新手都会犯这种错误——会情不自禁地在后面加分号。

因为 for 循环只能控制到其后的一条语句,而在C语言中分号也是一个语句——空语句。所以如果在后面加个分号,那么 for 循环就只能控制到这个分号,下面大括号里面的语句就不属于 for 循环了。

下面来看看它的执行过程:
求解表达式1。
求解表达式2。若其值为真,则执行 for 语句中指定的内嵌语句,然后执行第3步;若表达式2值为假,则结束循环,转到第5步。
求解表达式3。
转回上面第2步继续执行。
循环结束,执行 for 语句下面的语句。

----

参考文献:

C开源hash代码uthash的用法总结(1)

C开源hash代码uthash的用法总结(2)

Mosquitto-1.5.4源码分析,数据结构之哈希表uthash相关推荐

  1. JNI实现源码分析【三 间接引用表】

    在JNI实现源码分析[二 数据结构]的参数传递一节中,我们提到,JNI为了安全性的考虑使用了形如jobject的结构来传递参数.而jobject被表述为指针,但又不是直接指向Object的指针那么jo ...

  2. Django源码分析9:model.py表结构的初始化概述

    django源码分析 本文环境python3.5.2,django1.10.x系列 django源码分析-model概述 Django项目中提供了内置的orm框架,只需要在models.py文件中添加 ...

  3. Redis 源码分析-数据结构及实现(字典dict)

    Redis字典介绍 Redis是K-V型数据库, 整个数据库是用字典来存储的, 对Redis数据库进行任何增. 删. 改. 查操作, 实际就是对字典中的数据进行增. 删. 改. 查操作 字典需要的特征 ...

  4. [Java]源码角度深入理解哈希表,手撕常见面试题

    专栏简介 :java语法及数据结构 题目来源:leetcode,牛客,剑指offer 创作目标:从java语法角度实现底层相关数据结构,达到手撕各类题目的水平. 希望在提升自己的同时,帮助他人,,与大 ...

  5. lsd_slam 源码分析 数据结构 内存管理 Frame 图像金字塔 梯度金字塔 最大梯度值金字塔 逆深度值金字塔 逆深度方差值金字塔

    数据结构 lsd_slam代码 算法分析 Frame 帧类 详情 * 每张图像创建 5层的图像金字塔 每一层的尺度 变为上一层的1/2 * 图像的 内参数 也上上一层的 1/2 * 内参数求逆得到 内 ...

  6. 2022最新中高级Android面试题目,网络相关+Android三方库的源码分析+数据结构与算法

    前言 最近有些朋友提问,Android QQ空间 换肤实现原理是什么?于是,我决定在这里做一下回答.对这个方面感兴趣的朋友也可以来看下. 手q的换肤机制主要是通过拦截系统resource中的sPrel ...

  7. skynet源码分析之定时器skynet_timer.c

    skynet自带定时器功能skynet-src/skynet_timer.c,在skynet启动时会创建一个线程专门跑定时器.每帧(0.0025秒/帧)调用skynet_updatetime() 1 ...

  8. NSQ源码分析之Topic

    什么是Topic Topic作为nsqd的重要组成部分,里面存在一些有趣的设计,单独开一篇文章进行学习. 每个nsqd实例旨在一次处理多个数据流.这些数据流称为"topics",一 ...

  9. NSQ源码分析之channel

    阅读本文之前,推荐先阅读上一篇对topic的分析. 什么是channel 结合上一篇对topic分析,channel的作用就是将topic的数据进行分流,topic会将发布的消息分配给所有连接的cha ...

最新文章

  1. Unity OBB分包(基础APK+OBB) 与apk签名
  2. iOS开发~sizeClass和autolayout
  3. linux打jar包xml文件,springboot打jar包部署外置配置文件
  4. 体验VMware Converter Client 6.2与Veeam BR 10迁移ESXi 6.0 vm到vCenter 6.7 u3
  5. 半小时训练亿级规模知识图谱,亚马逊这个 AI 框架要火!
  6. 2022年上半年软考高项考试真题(三个科目都有)
  7. idea can‘t update no tracked branch choose upstream branch git
  8. CTF-实验吧-图片里的动漫
  9. Flutter 错误解决Building with plugins requires symlink support.
  10. 尚硅谷todolist案例
  11. 基于典型相关性分析(CCA)的多视图学习方法综述
  12. c/c++排坑(3) -- c/c++中的switch语句
  13. (信贷风控九)行为评分卡模型python实现
  14. 论文阅读笔记之手术器械分类的注意约束自适应核选择网络(SKA-ResNet)(一)
  15. 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛H题小Y与多米诺骨牌(线段树优化dp)
  16. 周一指导7.11黄金白银TD实时行情预测及原油解套操作建议
  17. linux将用户加入多个组,Linux 用命令把同一个用户加入多个组
  18. Linux CPU,内存查查清楚
  19. 计算机网络线上复试,线上复试实锤?在线复试技巧拿走不谢!
  20. 找出7个默森尼数,法国数学家默森尼曾提出下列公式:Mp=2^p-1。当p是素数,Mp也是素数时,称Mp为默森尼数, 例如,p=5,Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;而Mp

热门文章

  1. 成人教育有什么用处?
  2. HashMap和Set接口解决地铁收费问题
  3. 算法提高 聪明的美食家
  4. jsp分页功能的实现
  5. 《编程语言实现模式》笔记(一)词法和句法分析
  6. (1)课程简介-CS231A:Computer Vision, From 3D Reconstruction to Recognition
  7. android中根据城市选择学校,如何根据城市发展来选择学校?
  8. java读取注册表_Java通过CMD方式读取注册表任意键值对代码实践
  9. 谷歌更名为“Google中国”
  10. Ligntning接口破解,小伙伴们再也不用担心ios内核调试了