根据C和C++,CHAR_BIT >= 8
.br>
在什么样的系统上,uint8_t
可以被法律定义为unsigned char
以外的类型?
(如果C和C++的答案不同,那么我想知道两者都是.)
根据C和C++,CHAR_BIT >= 8
.br>
在什么样的系统上,uint8_t
可以被法律定义为unsigned char
以外的类型?
(如果C和C++的答案不同,那么我想知道两者都是.)
如果存在,uint8_t
的宽度必须始终与unsigned char
相同.然而,它不一定是同一类型;它可能是一种独特的扩展整数类型.它也不必具有与unsigned char
相同的代表性;例如,这些位可以按相反的顺序进行解释.这是一个愚蠢的例子,但它对int8_t
更有意义,其中signed char
可能是1的补码或符号大小,而int8_t
需要是2的补码.
即使在"正常"系统上,对uint8_t
使用非字符扩展整数类型的另一个"优势"是C的别名规则.字符类型可以别名任何东西,这会阻止编译器对同时使用字符指针和指向其他类型指针的函数进行大量优化,除非restrict
关键字应用得很好.然而,即使uint8_t
的大小和表示形式与unsigned char
完全相同,如果实现使其成为一种独特的非字符类型,则别名规则将不适用于它,例如,编译器可能会假设类型uint8_t
和int
的对象永远不能别名.