看板 C_and_CPP 關於我們 聯絡資訊
我寫了一個小程式 #include <stdio.h> int main() { char* a = (char*)-1; printf("%d\n", (a < (char*) 0)); printf("%d\n", (a <= (char*) -1)); return 0; } 意外得到結果是 0 1 一個變數居然 小於等於 -1 卻 不小於 0 !!! 原本猜測是有些平台上 char 會是 signed 有些是 unsigned 於是把 char 都改成 signed char,結果還是一樣... 因為有些 unistd 的東西 error 時會回傳 -1,所以會需要這樣判斷 這樣做到底問題在哪@@?? 我要怎麼寫才能保證各平台行為一致?(不會是未定義行為) 謝謝 -- 光明 的背後 是 黑暗 黑暗 的背後 還是 黑暗 由此可知 黑暗 > 光明 Q.E.D. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.230.123
diabloevagto:你這樣做的用意是什麼?小心爆炸 11/04 22:59
diabloevagto:http://ppt.cc/DPdA 這是你要的嗎?CHAR_MAX 11/04 23:06
像是 <sys/shm.h> 裡的 shmat() 當有 error 發生時會回傳 (void*)-1 但我不知道要怎麼判斷比較好@@... ※ 編輯: darkgerm 來自: 140.113.230.123 (11/04 23:15)
LPH66:用 == != 判斷就好 不要去管誰大誰小 11/04 23:21
darkgerm:喔喔感謝樓上!! 不過是什麼原因所以不能這樣做? 11/04 23:24
azureblaze:char*是pointer 基本上是unsigned 11/04 23:28
azureblaze:所以(char*) -1其實是0xFFFFFFFF之類的 11/04 23:29
LPH66:你不能保證這些東西比大小會如何 但你可以確定它們一不一樣 11/04 23:31
darkgerm:原來如此!! 所以只用 == != 就會沒問題 感謝! 11/04 23:32
bob123:az大正解.. 11/05 01:40