我是靠谱客的博主 阳光小馒头,最近开发中收集的这篇文章主要介绍cJSON详细剖析(七)----print_value()函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

从 剖析 五 我们可以发现,value()函数里面的print_number()函数以及print_array()函数应该是比较简单的函数。如下图,在剖析四里面,我们分析了print_object()函数,虽然没有分析print_string()函数,当时其调用的都是同一个函数print_string_ptr()。下面我们把另外俩也分析了。

print_number()函数

这个函数涉及的知识点还是挺多的我们一步步来分析。函数如下:

我们先分析第一个else  if,如下图。上面三个是在c库里面定义,DBL_EPSILON表示是最小的正数INT_MAX, INT_MIN表示是最大的int值和最小的int值。这里相当于用来判断item里面存储的是不是一个int型的正整数。

sprintf()把格式化的数据写入字符串str,如下图(来自百度百科)。所以这里的意思是,把item->valueint数字转化为str字符串。这里我发现百度百科讲的特别详细,想仔细了解的可以去看看。

接下来,我们分析后一个else语句,我在图中对一代码中的输出格式进行了解释,

绿色框中指的是这个数如果是一个大于INT_MAX的整数就输出为整数保存在str中,紫色框中的部分表示的是如果这个数是一个很小的数或者大于10^9,则以科学技术阀保存在str中,最后一个就和上一个相反了。最后返回str字符串。

print_array()函数

啊,居然有80行,我尼玛,我还以为很短的啊,开始吧...

我们分析else部分,大抵意思应该挺明显的,就是把链表中的每个结点的里的元素存储在entries中。

按逻辑分析,下面这个也很好理解了,就是将所有的字符串串成一个整的字符串,包括中括号,逗号等符号。其实这样也就分析完了。在细枝末节的东西就不扣了,也都是一些比较基本的东西,包括出错的处理了等等。

总结

print_value()函数算是讲完了,讲的不是很细,只是把大体的思路理清楚,c语言功底扎实的话,估计很快就能理解。到这里的话,doit(char *text)函数也就差不多讲完了,太小看cJSON的五百行,平常我们写代码,五六行的量在这居然压缩成了一行的量。我还居然很喜欢这这种风格,这样看起来还舒服些。拉老长看得也费劲,看了后面的还要拉上进步条才能看前面的,太费劲。对了,最后安利大家一个截图软件Snipaste,真是谁用谁知道啊,巨好用。特别是看代码的时候,需要多次跳转时,看了后面的前面的,可以统统截图下来一起看看,哈哈哈。到此结束,告辞!

 

 

 

 

 

 

最后

以上就是阳光小馒头为你收集整理的cJSON详细剖析(七)----print_value()函数的全部内容,希望文章能够帮你解决cJSON详细剖析(七)----print_value()函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部