【TDengine源码阅读】TAOS_DEF_ERROR_CODE(mod, code)

2025年5月13日,周二清晨


c 复制代码
#define TAOS_DEF_ERROR_CODE(mod, code) ((int32_t)((0x80000000 | ((mod)<<16) | (code))))

这段代码定义了一个宏 TAOS_DEF_ERROR_CODE(mod, code),用于生成一个32位有符号整数(int32_t)形式的错误码。其核心逻辑是通过位运算将模块标识符(mod)和具体错误码(code)组合成一个唯一的错误码值。以下是逐步解析:

  1. 宏结构

    • 宏名:TAOS_DEF_ERROR_CODE,接受两个参数 mod(模块标识符)和 code(具体错误码)。

    • 最终生成的错误码类型为 int32_t(32位有符号整数)。

  2. 位运算逻辑

    0x80000000:十六进制常量,二进制为 10000000 00000000 00000000 00000000,表示最高位(符号位)为1,确保生成的错误码为负数(通常用于标识错误状态)。

    (mod) << 16:将模块标识符 mod 左移16位,使其占据第16~31位(共16位)。例如,若 mod = 0x01,左移后为 0x00010000

    (code):直接使用 code 的值,占据低16位(第0~15位)。

    • 通过按位或运算 | 将三部分合并:

    错误码 = 0 x 80000000   ∣   ( mod ≪ 16 )   ∣   code \text{错误码} = 0x80000000 \, | \, (\text{mod} \ll 16) \, | \, \text{code} 错误码=0x80000000∣(mod≪16)∣code

  3. 示例

    假设 mod = 0x01code = 0x0A,则:

    0x80000000 | (0x01 << 16) | 0x0A

    • 等价于 0x80000000 | 0x00010000 | 0x0000000A

    • 结果为 0x8001000A(十进制值 -2147416054)。

  4. 应用场景

    • 这种设计常用于系统或库中,通过模块标识符和错误码的组合,快速定位错误来源。例如:

    ◦ 模块A(mod = 0x01)的错误码 0x0A 会被编码为 0x8001000A

    ◦ 模块B(mod = 0x02)的错误码 0x0A 则为 0x8002000A,避免冲突。

  5. 注意事项

    • 参数范围:modcode 需确保在合法范围内(如 mod 不超过16位,code 不超过16位),否则可能导致位溢出。

    • 符号位:最高位固定为1,生成的错误码始终为负数,符合许多系统将负数作为错误码的惯例。

参考类似位操作宏的实现逻辑,这种设计在嵌入式或系统编程中常见,用于高效编码和解码错误信息。

相关推荐
武子康12 小时前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive
大大大大晴天14 小时前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
武子康3 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
武子康4 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP4 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库4 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全
AI周红伟4 天前
周红伟:智能体全栈构建实操:OpenClaw部署+Agent Skills+Seedance+RAG从入门到实战
大数据·人工智能·大模型·智能体
B站计算机毕业设计超人4 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
计算机程序猿学长4 天前
大数据毕业设计-基于django的音乐网站数据分析管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
大数据·django·课程设计
B站计算机毕业设计超人4 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计