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