打印
[STM32]

关于函数的多次调用

[复制链接]
644|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djz1992|  楼主 | 2020-8-21 14:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是一段json解析的代码,其中多次用cJSON_GetObjectItem(time, "set")函数作为判断条件那么编译器会不会自动优化这段代码?
还是提取后先存起来再使用效率高?
buf = cJSON_GetObjectItem(time, "set");
value=atoi(buf->valuestring);
有区别吗?也许编译器会自己优化
@dirtwillfly @m564522634 @xyz549040622



 if (time != NULL) 
        {
                if (cJSON_GetObjectItem(time, "set") != NULL &&
                        (atoi(cJSON_GetObjectItem(time, "set")->valuestring) < 0
                        || atoi(cJSON_GetObjectItem(time, "set")->valuestring) > 99))
                {
                        SET_TIME_VALUE = SET_TIME_VALUE;
                        SHENGYU_TIME_MIN = SHENGYU_TIME_MIN;
                }
                else if
                (cJSON_GetObjectItem(time, "set") != NULL)
                {
                        if (mode == 2 || mode == 3)
                        {
                                SET_TIME_VALUE = SET_TIME_VALUE;
                                SHENGYU_TIME_MIN = SHENGYU_TIME_MIN;
                        }
                        else
                        {
                                SET_TIME_VALUE = atoi(cJSON_GetObjectItem(time, "set")->valuestring);
                                R_FLAG.time_value = SET_TIME_VALUE;
                                SET_TIME_TEMP_VALUE = SET_TIME_VALUE;
                                SHENGYU_TIME_MIN = SET_TIME_VALUE;
                                SHENGYU_TIME_SEC = 0;
                                R_FLAG.time=1;
                        }
                }
        }



使用特权

评论回复

相关帖子

沙发
ayb_ice| | 2020-8-21 16:00 | 只看该作者
一般不会存起来,因为可能会得到不同时的结果,而编译器不可能知道这些

使用特权

评论回复
板凳
dirtwillfly| | 2020-8-21 16:39 | 只看该作者
编译器没有那么高的智能的。
编译器大部分实现方式都是状态机。
多次使用某一个值,建议存储起来。调用cJSON_GetObjectItem很耗时的。

使用特权

评论回复
地板
djz1992|  楼主 | 2020-8-24 08:01 | 只看该作者
ayb_ice 发表于 2020-8-21 16:00
一般不会存起来,因为可能会得到不同时的结果,而编译器不可能知道这些

有道理啊,不过消息处理这部分的函数,这一帧处理完之前是不会变化的,倒是可以精简一下

使用特权

评论回复
5
djz1992|  楼主 | 2020-8-24 08:02 | 只看该作者
dirtwillfly 发表于 2020-8-21 16:39
编译器没有那么高的智能的。
编译器大部分实现方式都是状态机。
多次使用某一个值,建议存储起来。调用cJSO ...

是的呀,所以我才问这个问题。学习了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝