[轉錄][閒聊] 新手第八誡

作者: weii (迷惑失道)   2010-04-02 13:19:42
※ [本文轉錄自 C_and_CPP 看板]
作者: justdemon (人生的轉捩點) 看板: C_and_CPP
標題: [閒聊] 新手第八誡
時間: Thu Apr 1 17:17:30 2010
剛剛找出了一個Bug 大概是這樣的
unsigned int a = 0;
int b[10];
for( int i = 9; i >= a; i
作者: VictorTom (鬼翼&娃娃魚)   2010-04-01 17:22:00
呼~~這個case有難發現到, 辛苦了....Orz
作者: sjgau (sjgau)   2010-04-01 17:24:00
把 a 宣告成 int, 應該可以 解決問題
作者: james732 (好人超)   2010-04-01 17:26:00
覺得迴圈的 index 還是從 0 開始遞增比較習慣...XD
作者: sjgau (sjgau)   2010-04-01 17:26:00
應改是 compiler 把 i 轉型成 unsigned int, 所產生的剉
作者: VictorTom (鬼翼&娃娃魚)   2010-04-01 17:26:00
他已經找到錯誤了啦, 是提供給第八誡多一個錯誤例子XD
作者: tiyun (狄雲)   2010-04-01 17:27:00
感謝分享
作者: justdemon (人生的轉戾點)   2010-04-01 17:27:00
原始的程式有使用上的限制 一般來說也不是從0開始
作者: sjgau (sjgau)   2010-04-01 17:27:00
不太同意樓上的說法,index 的 ++ or -- , 應該看需要
作者: uranusjr (←這人是超級笨蛋)   2010-04-01 17:28:00
warming...編譯器取暖?XD
作者: justdemon (人生的轉戾點)   2010-04-01 17:28:00
unsigned的宣告 也是因為這個值確定是正的XXDD 英文不好 請見諒
作者: james732 (好人超)   2010-04-01 17:29:00
原來如此 這個真的很難發現話說MS的VC++竟然可以正常執行...XD
作者: VictorTom (鬼翼&娃娃魚)   2010-04-01 17:32:00
同意兩位j大說的, warming 很難發現到. (光速逃XD)
作者: sawang (Keinohrhasen)   2010-04-01 17:42:00
I like it :)
作者: nowar100 (拋磚引玉)   2010-04-01 18:18:00
Good 等下我改 有事先離 :)
作者: loveme00835 (髮箍)   2010-04-01 18:25:00
真好玩 :)
作者: AmosYang (泛用人型編碼器)   2010-04-01 18:54:00
有(苦)笑有推 XD
作者: holymars   2010-04-01 22:26:00
這個我之前也碰到過.....
作者: softwind (software everywhere)   2010-04-02 00:48:00
如果是當作index 的確應該是宣告成 unsigned int但 先不管這個部份 int/unsigned int 比大小一直讓我覺得很奇怪 有兩種說法 一種是 疑慮cast成unsign另一種是先判斷signed能不能放 可以一律轉成 singed如果放不下 一律轉成unsigned 才比較
作者: nowar100 (拋磚引玉)   2010-04-02 00:54:00
同樣精確度signed一定轉unsigned 不同大小都是看哪個比較大 小的promote成大的 我學到的印象是這樣
作者: softwind (software everywhere)   2010-04-02 02:38:00
不是歐 我看到的是 如果兩邊的值 可以塞進signed 優先用sign 不足 才強制轉成unsigned
作者: littleshan (我要加入劍道社!)   2010-04-02 03:49:00
signed 和 unsigned 根本不能比突然想到如果是先看 unsigned 的 msb 來比較就ok了吧?signed 轉成 unsigned 是不能比的,-1會變2^32-1
作者: Knighter   2010-04-02 10:03:00
for () 才對

Links booklink

Contact Us: admin [ a t ] ucptt.com