作者XtendaceD (X招待王牌D)
看板C_and_CPP
标题[问题] 看不懂程式码
时间Mon May 8 21:57:58 2017
开发平台(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;
想改成这样 应该没有违背原作者意思吧
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.236.16.127
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1494251880.A.868.html
※ 编辑: XtendaceD (36.236.16.127), 05/08/2017 22:02:52
※ 编辑: XtendaceD (36.236.16.127), 05/08/2017 22:03:42
1F:推 james732: 不太懂为什麽会跑出那个warning... 05/08 22:39
2F:推 LPH66: 置底十三诫之八, 你那样改 OK 05/08 22:41
3F:推 chuegou: 我以为他要用环状伫列 05/08 23:37
4F:→ james732: 咦我直觉会以为这不算未定义行为 05/09 00:21
5F:→ dritchie: 改成 x=((x+1)&255) 就好啦~ 05/09 01:30
6F:推 LPH66: 楼上的也行, 但原先的写法接近 x=((x+=1)&255) 所以是 UB 05/09 07:52
7F:推 CoNsTaR: 楼楼上那样x没变吧 05/11 05:14
8F:→ CoNsTaR: 呃…我在说啥 XDDD 05/11 05:15