看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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://www.ptt.cc/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
james732: 不太懂為什麼會跑出那個warning... 05/08 22:39
LPH66: 置底十三誡之八, 你那樣改 OK 05/08 22:41
chuegou: 我以為他要用環狀佇列 05/08 23:37
james732: 咦我直覺會以為這不算未定義行為 05/09 00:21
dritchie: 改成 x=((x+1)&255) 就好啦~ 05/09 01:30
LPH66: 樓上的也行, 但原先的寫法接近 x=((x+=1)&255) 所以是 UB 05/09 07:52
CoNsTaR: 樓樓上那樣x沒變吧 05/11 05:14
CoNsTaR: 呃…我在說啥 XDDD 05/11 05:15