看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) N 問題(Question): 程式中有一段敘述大致上是這樣: char Buf[1024]; int Inx; for(Inx=0x000; Inx<sizeof(Buf); Inx=Inx+1) { ... } compiler不太喜歡它,所以說了: warning: comparison between signed and unsigned integer expressions 它說的signed integer應該是指Inx,所以我想sizeof()的回傳值是unsigned integer 型態,下面新手十戒有提到不同資料型態的兩個值不該被拿來比較、賦值,請問在這 狀況中,如果我想轉型成相同的型態: for(Inx=0x000; Inx<(int)sizeof(Buf); Inx=Inx+1) 或 for(Inx=0x000; (unsigned int)Inx<sizeof(Buf); Inx=Inx+1) 哪個是比較好的選擇呢?或是還有其他更好的做法嗎? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): 沒有了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.67.181.135
stupid0319:(unsigned int)Inx 這個做法一定死很慘 01/21 19:17
stupid0319:不過Inx是正的就沒差了sizeof(Buf)一定不會太大 01/21 19:18
LPH66:推樓上 我也認為前一種較好 01/21 19:18
stupid0319:可是只是warning而已,不用理他也沒差啦 01/21 19:19
tropical72:選第一種,另外把 < 改成 != 01/21 19:20
loveme00835:最好的方法是 size_t Inx; 型態一樣就沒問題 01/21 19:36
loveme00835:記得引入 <cstddef> 01/21 19:37
cobrasgo:這個要先確定原來的程式到底要幹嘛吧,不同的環境定義的 01/21 21:03
cobrasgo:資料佔的位元數也不一樣 01/21 21:03
james732:推size_t 01/21 21:50