JINANDAWEI 2016-08-27 07:44 采纳率: 0%
浏览 1059

MFC C++ 的运算问题 表达式不同结果完全不同

        //by1 = pbuf[DataAddr++];
        //by2 = pbuf[DataAddr++];
        wSlaveNodNum = pbuf[DataAddr++] + (((WORD)pbuf[DataAddr++])<<8);
        和
        by1 = pbuf[DataAddr++];
        by2 = pbuf[DataAddr++];
        wSlaveNodNum =  by1 + (((WORD)by2)<<8);

        pbuf[0x40,0x00],DataAddr=0上面两种运算结果完全不同,求解
  • 写回答

2条回答 默认 最新

  • AlbertS 博客专家认证 2016-08-27 08:02
    关注

    1)一般情况下要选用第二种明确的写法,而不要使用第一种写法
    2)第一种写法会出现副作用,求值顺序不明确有时候会等价于

     wSlaveNodNum = pbuf[DataAddr] + (((WORD)pbuf[DataAddr])<<8);
    ++DataAddr;
    ++DataAddr;
    
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画
  • ¥15 TeleScan不能修改bar
  • ¥100 请问我基于逐飞库写的这个有关于mp u6050传感器的函数,为什么输出的值是固定的?
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别
  • ¥15 使用Ant Design Pro vue的时候,使用环境变量的时候,构建报错是什么原因