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;
    
    评论

报告相同问题?