[問題] 看不懂程式碼

看板C_and_CPP作者 (X招待王牌D)時間8年前 (2017/05/08 21:58), 8年前編輯推噓5(503)
留言8則, 5人參與, 最新討論串1/1
開發平台(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

05/08 22:39, , 1F
不太懂為什麼會跑出那個warning...
05/08 22:39, 1F

05/08 22:41, , 2F
置底十三誡之八, 你那樣改 OK
05/08 22:41, 2F

05/08 23:37, , 3F
我以為他要用環狀佇列
05/08 23:37, 3F

05/09 00:21, , 4F
咦我直覺會以為這不算未定義行為
05/09 00:21, 4F

05/09 01:30, , 5F
改成 x=((x+1)&255) 就好啦~
05/09 01:30, 5F

05/09 07:52, , 6F
樓上的也行, 但原先的寫法接近 x=((x+=1)&255) 所以是 UB
05/09 07:52, 6F

05/11 05:14, , 7F
樓樓上那樣x沒變吧
05/11 05:14, 7F

05/11 05:15, , 8F
呃…我在說啥 XDDD
05/11 05:15, 8F
文章代碼(AID): #1P47beXe (C_and_CPP)