最近项目需要提供c库的sdk库给客户使用
使用c++写业务,习惯了使用STL库、string等模块的使用,突然用c来整,没有现成的容器,只有数组,字符串得用char *,写起来麻烦好多
秉着不重复造轮子的思想,就网上找能用的c封装的可变数组的库,就找到了这次的主角,号称c语言中的“Boost”–CCAN
官网:http://ccodearchive.net/
Github:https://github.com/rustyrussell/ccan
使用
根据官方的说明,有两种使用方法
- 将模块放入项目的 ccan/ 子目录中。 添加“config.h”并编译 ccan/* 中的每个 .c 文件(给出了config.h的例子,可以用提供的configurator工具生成)
- 把想要用的模块的源码添加到自己的项目中直接使用
第1种方式实力有限,不清楚是怎么用的
我采用的是第2种方式
因为提供的源码,如果要用其中某个模块,下载该模块的代码,添加到自己的工程中,CCAN每个模块都是独立的,依赖很少
以darray可变数组为例
下载下来源码只有一个darray.h
添加到工程就能直接用,不过代码中有#include “config.h”的依赖,注释掉就好了
这个是比较简单的依赖最少的了
比如bytestring char *的浅封装,下载下来后发现依赖挺多的
添加到工程中最好保留原有文件夹形式,array_size、build_assert、compiler、mem是CCAN比较通用的模块,其他模块也会依赖到,解决好include的问题就OK了,这也算开发的基本技能了吧
使用过几个模块,linux和windows下都能够编译使用,应该是用原生c写的,是支持跨平台的
常见的业务模块
base64 | base64编解码(用法挺简单的) |
bytestring | char *的浅封装,类似Qt QByteArray |
darray | 可变数组(c++用vector容器习惯了,用c的数组来写业务有点蛋疼) |
deque | 双端队列 |
json | json的生成和解析(用法挺简单的) |
list | 链表 |
tap | 单元测试(下载的代码会包含一些测试的代码,会用到这个) |
ttxml | 解析xml |
utf8 | utf8编解码 |
更多的模块查看官网的列表http://ccodearchive.net/list.html
结语
我认为有现成的轮子,拿来做基本的业务开发完全是够用的,至于这些代码的效率如何,没有测试对比过,有需求的可以自己测试一下
当然也可以用来学习,一些简单模块可以参照着自己实现,毕竟提供的是源码
github上看CCAN算是好几年以前就开始的项目了,不过最近几个月还是有更新的,贡献代码的人还挺多的,不算是没人维护的项目
CCAN我自己目前用得也不算多,觉得这东西挺方便挺实用,安利一波