根据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_tint的对象永远不能别名.

C++相关问答推荐

代码打印正确输出次数过多(CS50)

如何使用Python C API实现多线程程序?

减法运算结果的平方的最快方法?

创建一个fork导致fget无限地重新读取文件

如何知道我是否从非阻塞套接字读取所有内容

当我更改编译优化时,相同的C代码以不同的方式运行

自定义变参数函数的C预处置宏和警告 suppress ?

非正规化边缘毛刺

致命:ThreadSaniizer:在Linux内核6.6+上运行时意外的内存映射

进程已完成,退出代码为138 Clion

这个C程序在工作中途停止获取输入.我收到分段故障(核心转储).我还是不知道问题出在哪里

#定义SSL_CONNECTION_NO_CONST

预处理器宏扩展(ISO/IEC 9899:1999(E)§;6.10.3.5示例3)

Caesar密码调试:输出文本末尾的问号和随机字符

GCC错误,共享内存未定义引用?

如何在C中定义指向函数的指针并将该指针赋给函数?

x86-64平台上的int_fast8_t大小与int_fast16_t大小

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

execve 不给出which命令的输出

如何在 C 中的 Postgres 函数的表中 for 循环