<output id="hxt7n"><dfn id="hxt7n"><form id="hxt7n"></form></dfn></output>

<track id="hxt7n"><progress id="hxt7n"><th id="hxt7n"></th></progress></track>
<address id="hxt7n"><big id="hxt7n"></big></address>

      <sub id="hxt7n"></sub>

      搜索
      打印

      [编程] 成都控制器开发:千万注意,不要轻易把变量定义...

      [复制链接]
      425|5
      跳转到指定楼层
      楼主
      最近开发编写一个测试设备的程序(C程序),在定义一个全局变量的时候,之前我喜欢在定义的时候直接赋值,如这样:
      unsigned char a=0;//这里直接给变量a定义并赋值
      void main_function()
      {
      //在这里使用a
      ...
      }
      不过这样做的时候却有时可能要出问题,比如可能导致在后期使用的时候a可能不等于0。最近就被这个故障烦了好久,起初检查好几遍了都无头绪,最后用串口把变量a传出显示才发现,a的数值变了,
      a咋会变呢?你打si也想不到它会变心,
      最后改为如下面的定义和赋值单独进行,问题才得以解决,
      unsigned char a;//定义a
      void main_function()
      {
      a=0;//给a赋值
      ...
      }
      其实之前按照前一种方式做的也都没有问题,不过最近又修改了不少代码才出了故障。有时候看似省了一行代码,其实导致了不可预见的不稳定的bug,还是应当按照规范来,毕竟,找出这个问题在哪里实在太不容易了,要花很多时间和尝试。
      更多干货,尽在微信公众号:yonkotech

      使用特权

      评论回复
      沙发
      | 2020-2-23 16:38 | 只看该作者 | 奖励家园币
      不会吧??我一直这么定义变量啊

      使用特权

      评论回复
      板凳
      | 2020-2-24 08:00 | 只看该作者 | 奖励家园币
      是不会出现这样的问题
      不过如果你在函数内定义如:
      {
        int a= 0;
        //todo....
        a = 10;
      }
      这个时候第一个a=0会被编译器优化掉,但是也不会影响程序逻辑
      这个规则我不确定在全局变量的时候是否生效
      另外检查变量是否存在no_init 这样的编译器修饰词

      使用特权

      评论回复
      地板
      | 2020-2-24 16:29 | 只看该作者 | 奖励家园币
      我才不信...

      使用特权

      评论回复
      5
      | 2020-2-24 16:55 | 只看该作者 | 奖励家园币
      真出现这个现象,楼主先不要质疑其它的了,先去找自己程序的bug,到底那地方给你乱改了变量(数组越界,野指针等等)

      使用特权

      评论回复
      6
      | 2020-2-24 19:05 | 只看该作者 | 奖励家园币
      应该是程序中有其它地方修改数值了……比如在几个函数中都有可能修改变量……

      最简单的是加个关键字去限定,不让软件在编译中去优化。还有问题就回头逐步去分析逻辑关系

      使用特权

      评论回复
      扫描二维码,随时随地手机跟帖
      您需要登录后才可以回帖 登录 | 注册

      本版积分规则

      我要发帖 投诉建议 创建版块 申请版主

      快速回复

      您需要登录后才可以回帖
      登录 | 注册
      高级模式

      论坛热帖

      关闭

      热门推荐上一条 /4 下一条

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