|
不經一事不長一智 |
還真不知道怎麼寫這個標題, 從程式碼看結果。
d.cpp 應該要印出 yy 還是 zz 呢? 答案可能出乎你的意料之外, 回答 yy 或是 zz 的朋友恭喜你們都答對了。
怎麼辦? 把 char c = 0xff; 改成 unsigned char c = 0xff; 就可以得到相同結果 yy; 而把 char c = 0xff; 改成 signed char c = 0xff 則會得到相同結果 zz。
以下的 gcc option 也可以做到類似的效果。
看來還是把 char 的 signed/unsigned 指定好比較保險。
arm 版本的 gcc char 是 unsigned char; x86 版本的 gcc char 是 signed char。
感謝大大,又增加了一點知識。
回覆刪除這以前寫DOS程式好像就遇過類似問題
回覆刪除Turbo/Borland C 也可以預設 char 是 unsigned 或是 signed
個人偏好用unsigned 因為常常需要處理 raw/binary 跟硬體有關的東西
這個坑很大, 好幾位朋友都踩過。
回覆刪除