千家信息网

如何利用C语言可变参数和宏定义来实现自己的日志系统

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关如何利用C语言可变参数和宏定义来实现自己的日志系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在嵌入式应用的开发过程中,
千家信息网最后更新 2026年11月03日如何利用C语言可变参数和宏定义来实现自己的日志系统

这篇文章将为大家详细讲解有关如何利用C语言可变参数和宏定义来实现自己的日志系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

在嵌入式应用的开发过程中,日志系统是非常重要的!

特别是在生产环节出现了偶发性的、与当前的执行环境相关的bug的时候,

如果没有日志系统来追踪问题,很难进行问题重现。

因此,实现一个自己的日志系统是很有帮助、很必要的。

在软件模型上,一般是把日志系统编译成库文件。

应用程序直接调用库中提供的API接口函数,即可记录日志信息。

那么实现自己的日志系统需要有3个问题需要处理:

(1)日志API函数的设计。

(2)日志信息的缓存。

(3)日志信息的持久化,也就是写入到本地文件系统。

主要说明第一个问题:日志API函数的设计。

先上代码:

测试

知识点

1.字符串字面量的拼接

在C语言中,字符串的拼接有很多种方法:memcpy,strcpy,strcat,sprintf等等。

在代码19行,使用了C语言中的字符串字面量拼接的方式,把 " %s:%d(%s) \"" format "\"\n" 这3个字符串拼接成一个字符串。

补充一下:

在日志系统代码中,有些地方需要格式化字符串。

使用sprintf是最方便的,但是也是效率最低的!

也可以利用一些第三方的库来实现字符串格式化,比如:fmtlib,facebook 的 folly format,google的 Abseil StrFormat。

当然,最好的方式是自己实现格式化特定类型的数据,可以显著的提高日志系统的吞吐量,下一篇文章再说说这部分代码。

2.可变参数

大家都知道,printf函数就是通过可变参数机制来实现的。

可变参数可以这样定义和使用:

(1)不带参数名

(2)带参数名

第20行代码用 __VA_ARGS__ 来代表宏定义参数中的三个点(...),也就是可变参数。

再来说说"##"。

如果调用:debug2("code = %d", 100); 这样调用没有问题。

如果调用:debug2("hello"); 这里调用时,在format后面没有传入任何参数,那么就会编译错误,因为在宏替换之后变成了 printf("hello",),第一个参数之后多了一个逗号,因此报错。

如果调用:debug3("hello, world!"); 这样就没有问题,因为debug3中在可变参数__VA_ARGS__的前面有"##",当编译器发现没有传入参数时,会自动把format后面的逗号去掉,所以编译OK。

3.宏定义中的#和##

#的作用就是在预处理的时候,把宏参数进行"字符串化",例如:

##的作用就是在预处理的时候,把两个宏参数进行"粘合",例如:

关于如何利用C语言可变参数和宏定义来实现自己的日志系统就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

参数 日志 系统 字符 字符串 可变 问题 语言 代码 函数 信息 就是 时候 格式 知识 篇文章 编译 也就是 作用 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 今日互联网科技 互联网扶贫科技 北京互联网科技 金融科技 互联网金融 北京互联网络科技有限公司 融势互联网科技 上海亿帐通互联网科技 互联网科技公司招聘 创业天下互联网科技有限公司 宁夏众和广鑫互联网科技有限公司 互联网还是高科技吗 开一家科技互联网公司需要多少钱 朱啸虎曾投资哪些互联网科技企业 元气玛特互联网科技公司是外包吗 国产互联网科技公司 互联网科技企业商标注意事项 万物互联网智能科技 长沙渺峰互联网科技有限公司 黑龙江互联网科技公司 知域互联网科技有限公司官网 互联网科技 广东猪兼强互联网科技有限公司 互联网金融和金融科技 科技伦理 互联网公司 无锡溥仪互联网科技有限公司 上海电发互联网科技有限公司 长沙茂晟互联网科技有限公司 工业互联网等科技实现智能化赋能 容联科技互联网电商 上海互联网科技园景观
0