[问题] 看不懂程式码

楼主: XtendaceD (X招待王牌D)   2017-05-08 21:57:58
开发平台(Platform): (Ex: Win10, Linux, ...)
win7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
keil C
问题(Question):
程式码里面红色那行会 warining
multiple unsequenced modifications to 'm_rs2CmdLen'
如何改比较好
程式码(Code):(请善用置底文网页, 记得排版)
volatile uint16_t m_rs2CmdLen;
volatile int m_rc;
static char m_rs2CmdBuf[255];
void main (void)
{
m_rs2CmdLen = 0;
while (TRUE)
{
if (m_rc >= 0)
{
m_rs2CmdBuf[m_rs2CmdLen] = (char) m_rc;
m_rs2CmdLen = (++m_rs2CmdLen & 255);
if (m_rc == ASCII_CR) /* m_rc == "\r" char_0x0D */
{
m_rc = cmdRS2Interpreter(m_rs2CmdBuf, m_rs2CmdLen);
m_rs2CmdLen = 0;
}
}
}
}
补充说明(Supplement):
m_rs2CmdLen++;
m_rs2CmdLen = m_rs2CmdLen & 255;
想改成这样 应该没有违背原作者意思吧
作者: james732 (好人超)   2017-05-08 22:39:00
不太懂为什么会跑出那个warning...
作者: LPH66 (-6.2598534e+18f)   2017-05-08 22:41:00
置底十三诫之八, 你那样改 OK
作者: chuegou (chuegou)   2017-05-08 23:37:00
我以为他要用环状伫列
作者: james732 (好人超)   2017-05-09 00:21:00
咦我直觉会以为这不算未定义行为
作者: dritchie (卍~迈斯纳效应~卍)   2017-05-09 01:30:00
改成 x=((x+1)&255) 就好啦~
作者: LPH66 (-6.2598534e+18f)   2017-05-09 07:52:00
楼上的也行, 但原先的写法接近 x=((x+=1)&255) 所以是 UB
作者: CoNsTaR ((const *))   2017-05-11 05:14:00
楼楼上那样x没变吧呃…我在说啥 XDDD

Links booklink

Contact Us: admin [ a t ] ucptt.com