[問題] 看不懂程式碼

作者: 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