[STM32] 关于函数的多次调用

[复制链接]
 楼主| djz1992 发表于 2020-8-21 14:42 | 显示全部楼层 |阅读模式
以下是一段json解析的代码,其中多次用cJSON_GetObjectItem(time, "set")函数作为判断条件那么编译器会不会自动优化这段代码?
还是提取后先存起来再使用效率高?
buf = cJSON_GetObjectItem(time, "set");
value=atoi(buf->valuestring);
有区别吗?也许编译器会自己优化
@dirtwillfly @m564522634 @xyz549040622



  1. if (time != NULL)
  2.         {
  3.                 if (cJSON_GetObjectItem(time, "set") != NULL &&
  4.                         (atoi(cJSON_GetObjectItem(time, "set")->valuestring) < 0
  5.                         || atoi(cJSON_GetObjectItem(time, "set")->valuestring) > 99))
  6.                 {
  7.                         SET_TIME_VALUE = SET_TIME_VALUE;
  8.                         SHENGYU_TIME_MIN = SHENGYU_TIME_MIN;
  9.                 }
  10.                 else if
  11.                 (cJSON_GetObjectItem(time, "set") != NULL)
  12.                 {
  13.                         if (mode == 2 || mode == 3)
  14.                         {
  15.                                 SET_TIME_VALUE = SET_TIME_VALUE;
  16.                                 SHENGYU_TIME_MIN = SHENGYU_TIME_MIN;
  17.                         }
  18.                         else
  19.                         {
  20.                                 SET_TIME_VALUE = atoi(cJSON_GetObjectItem(time, "set")->valuestring);
  21.                                 R_FLAG.time_value = SET_TIME_VALUE;
  22.                                 SET_TIME_TEMP_VALUE = SET_TIME_VALUE;
  23.                                 SHENGYU_TIME_MIN = SET_TIME_VALUE;
  24.                                 SHENGYU_TIME_SEC = 0;
  25.                                 R_FLAG.time=1;
  26.                         }
  27.                 }
  28.         }
复制代码



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
一般不会存起来,因为可能会得到不同时的结果,而编译器不可能知道这些

有道理啊,不过消息处理这部分的函数,这一帧处理完之前是不会变化的,倒是可以精简一下
 楼主| djz1992 发表于 2020-8-24 08:02 | 显示全部楼层
dirtwillfly 发表于 2020-8-21 16:39
编译器没有那么高的智能的。
编译器大部分实现方式都是状态机。
多次使用某一个值,建议存储起来。调用cJSO ...

是的呀,所以我才问这个问题。学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

115

主题

620

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部