文章目录
01 前言
对于一个优秀的程序员来说, 除了要学好基础知识, 还要不断阅读, 吸收前人的优秀代码, 才能不断前进
因此我决定先从一个C语言的项目开始 , 这里选择的项目是一个比较简单的C项目: cJSON
01-简介及clone地址
cJSON: cJSON是一个高效的JSON解析器,
github地址: cJSON
之后就能下载代码了
02-目录结构介绍
cJSON项目的目录结构如下所示, 事实上, cJSON_Utils.h与cJSON_Utils.c文件并没有真正使用,其中的工具函数其实都被转移到了cJSON.c
文件中, 阅读整个cJSON项目其实就两个文件
cJSON.h
cJSON.c
03-阅读环境搭建
这里我们选用QtCreator
这个IDE进行源码的阅读, 搭建步骤如下
QtCreator: 官方网站
- 文件下载后解压到一个目录中,
文件->打开文件或项目
, 选中刚刚解压好的所有文件 - 上一步结束后, 可能会发现只有一个CMakeLists.txt被导入到了工作空间中, 原因是我们没有进行项目的编译配置, 在左下角选择构建套件
- 之后就能发现工作区域中项目目录结构变成如下
4. 可以点击左下角运行来运行一下默认的测试程序默认程序的main函数在text.c中)
5. 可以在应用程序输出窗口看到以下内容
03-编程风格
作者的编程风格是显而易见的
- 不在头文件中定义文件, 只声明, 因此头文件所有都加上
extern
关键字 - 对于以
A.h
命名的文件, 其中的函数名都以A_xxx
方式命名
02 cJSON.h头文件
01-版权声明
02-避免头文件重复引入
#ifndef cJSON__h
#define cJSON__h
//编写头文件代码
#endif
03-兼容C++
#ifdef __cplusplus
extern "C"
{
#endif
/*兼容c++的代码*/
#ifdef __cplusplus
}
#endif
04-数据类型定义
/* cJSON Types: */
#define cJSON_False (1 << 0)
#define cJSON_True (1 << 1)
#define cJSON_NULL (1 << 2)
#define cJSON_Number (1 << 3)
#define cJSON_String (1 << 4)
#define cJSON_Array (1 << 5)
#define cJSON_Object (1 << 6)
#define cJSON_IsReference 256
#define cJSON_StringIsConst 512