作者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/m.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