C语言复杂struct类型get或者set字段的简化方法

今天学习librdkafka的conf配置相关的代码,学到了一个C语言代码编写的技巧。作者真的是把C语言用得出神入化。

我们平时编写C语言代码,经常会用struct类型来模拟面向对象中的class。比如我实现了下面的Student结构体    

 

 

 

 

 

 

 

 

 

 

 

可以看到零零碎碎有十多个字段。如果我们想再把这个struct模拟class模拟得像一点,那么get和set方法是没有办法避免的。要么对每个字段都实现一个get和一个set,要么写个函数,在函数内部写一大堆if..else。

如果字段比较少,就像我上面的这个Struct一样,这种方式还可以接受。但是想想kafka数十上百个配置,这么干无疑会使得代码量膨胀,而且日后增加字段也不方便,一定会有很多相关函数要去跟着更改,增加维护成本。所以librdkakfa的作者使用了另外一种思路。看完下面的代码就会明白到底是怎么做的,没有一个get和set方法或者大量的if else,仅仅是提供了2个宏就把这个问题解决掉了。

运行结果:

  假如Student_t中的每个字段是kafka中的一个配置项。kafka_conf的每个配置项都是一个property结构体,然后这些property结构体构成conf结构体。每个property结构体中保存了该property在conf结构体中的offset。这样就可以很方便地进行struct的get和set,而不用写大量的代码。而且如果日后增加property,也没有大量的函数要跟着改,降低了维护难度。

posted @   Frogjie  阅读(2421)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示