概述
从 剖析 五 我们可以发现,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()函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复