Re: C/C++ 語言新手十三誡 -- Ver. 2016

作者: dreamboat66 (小嫩)   2016-06-11 06:51:02
請問一下 看到第七誡 有個例子不甚了解
=====================
錯誤例子: (感謝 sekya 網友提供)
unsigned char a = 0x80; /* no problem */
char b = 0x80; /* implementation-defined result */
if( b == 0x80 ) { /* 不一定恒真 */
printf( "b ok\n" );
}
說明:語言並未規定 char 天生為 unsigned 或 signed,因此將 0x80 放入
char 型態的變數,將會視各家編譯器不同作法而有不同結果
======================
常常看到大家使用或是傳遞buffer都是char 型別,
看完這例子讓我覺得是不是都可能有問題?
把一個超過127的數值塞給char 就可能有問題?
或是拿出來跟超過127的數值做比較也會有問題?
如果這樣是不是buffer 都應該用unsigned char 來宣告跟操作才保險呢
謝謝
作者: steve1012 (steve)   2016-06-11 07:40:00
Buffer 都是char*吧
作者: PkmX (阿貓)   2016-06-11 08:04:00
如果你是要塞8-bit的data 正確來說應該要用uint8_t
作者: descent (「雄辯是銀,沉默是金」)   2016-06-11 11:14:00
作者: uranusjr (←這人是超級笨蛋)   2016-06-11 11:24:00
確實用 char 來當 8-bit 操作是錯誤的做法, 除非你一定只傳 ASCII 資料
作者: Caesar08 (Caesar)   2016-06-11 14:08:00
能當作8 bit還是在C++14之後呢
作者: PkmX (阿貓)   2016-06-11 23:55:00
其實char也不一定要是8bit 它的bit個數是CHAR_BIT
作者: cgcheng (..)   2016-06-12 14:27:00
我覺得這例子不對,要換吧?抱歉,看錯,我的錯。剛重新看了一下XD

Links booklink

Contact Us: admin [ a t ] ucptt.com