[問題] 一段程式碼的問題

看板C_and_CPP (C/C++)作者 (反省中..嗎)時間13年前 (2012/10/04 16:54), 編輯推噓4(406)
留言10則, 2人參與, 最新討論串1/1
這段code是在linux-input上看到的. 也許會open在linux 3.7吧. 我只取一段我看不動的地方 http://pastie.org/4906985 不了解為何 只定義 u8 data[0] 但卻可以使用到data[1] 41行處. 又同時可用到 cmd->c.opcode, cmd->c.reportTypeID sizeof(union command) = 4 args_len = 2 因此他會allocat 6Byte給cmd 請問這樣寫會有問題嗎? 謝謝. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 223.139.227.186

10/04 17:35, , 1F
我覺得你應該弄錯 u8 data[0] 的位置了...
10/04 17:35, 1F

10/04 17:36, , 2F
等一下 我漏掉那整個是個 union @@
10/04 17:36, 2F

10/04 19:44, , 3F
這個看起來頗像柔性陣列 (flex array) ..
10/04 19:44, 3F

10/04 19:45, , 4F
實際上用 u8 *data 可能會較好, u8 data[0] 在標準上是不
10/04 19:45, 4F

10/04 19:46, , 5F
合法的. 拙作 http://0rz.tw/CDPY0 section 6
10/04 19:46, 5F

10/04 19:47, , 6F
板上其他討論 : #1DhhMrOO (C_and_CPP) 系列文。
10/04 19:47, 6F

10/04 19:51, , 7F
(補結論,如果data[0]在那裡可編的話,這段碼沒問題。)
10/04 19:51, 7F

10/04 23:15, , 8F
u8 *data 跟這個不同吧...不知道 union 裡能不能放 [] 就是
10/04 23:15, 8F

10/04 23:15, , 9F
(我是指在 C++11 裡)
10/04 23:15, 9F

10/04 23:24, , 10F
u8 *data 是不同,寫錯了抱歉。 (不過真的蠻像 flex arr.)
10/04 23:24, 10F
這段code是可以編譯過的, 使用gcc 4.6.3編譯沒問題. 執行起來也OK. 但還是覺得這段code蠻tricky的 XD ※ 編輯: pilipalabon 來自: 114.137.38.22 (10/05 08:57)
文章代碼(AID): #1GRKx0k6 (C_and_CPP)
文章代碼(AID): #1GRKx0k6 (C_and_CPP)