有机器(或编译器)吗?

C99 standard是否表示标准合规性实施的sizeof(char)必须正好是1?如果有,请给我章节号和引文.

Update: 如果我有一台机器(CPU),它不能寻址字节(最小读取是4字节,对齐),但只能寻址4-s字节(uint32_t),这台机器的编译器可以定义sizeof(char)到4?101 will be 1, but char will have 32 bits(CHAR_BIT个宏)

Update2:个 但是sizeof结果不是字节!这是查尔的大小.字符可以是2个字节,或者(可以是)7位?

Update3:

推荐答案

C99第6.5.3.4节中始终有一个:

当应用于具有

Edit: not part of your question, but for interest from Harbison and Steele's. C: A Reference Manual, Third Edition, Prentice Hall, 1991 (pre c99) p. 148:

存储单元被视为

编辑:在回答您更新的问题时,以下来自Harbison和Steele的问题和答案是相关的(同上,第6章Ex.4):

允许有C吗

答复(同上,第382页):

这是允许的(如果是浪费的) 实现使用32位来 表示类型char.不管 的实现、价值 sizeof(char)始终为1.

虽然这没有具体解决这样的情况,比方说字节是8比特,而char是这些字节中的4个(实际上用C99定义是不可能的,见下文),但是从C99标准和Harbison和Steele来看,sizeof(char) = 1总是清晰的这一事实.

编辑:事实上(这是对你的upd 2问题的回答),就c99而言,第6.5.3.4节中的sizeof(char)is字节:

sizeof运算符生成大小

因此,结合上面的引用,8位字节和char作为其中4位的字节是不可能的:对于c99来说,一个字节等于一个char.

在回答您提到的7位char的可能性时:这在c99中是不可能的.根据本标准第5.2.4.2.1节,minimum为8:

其实现定义值的大小应等于所示值的or greater【我的重点】,并带有相同的符号.

-非位字段的最小对象的位数(字节)

 **CHAR_BIT 8**

-类型为signed char的对象的最小值

**SCHAR_MIN -127//−(27−1)** 

-类型为signed char的对象的最大值

**SCHAR_MAX +127//27−1** 

-类型为unsigned char的对象的最大值

**UCHAR_MAX 255//28−1** 

-char类型的对象的最小值

**CHAR_MIN**    see below 

-char类型的对象的最大值

**CHAR_MAX**    see below

[.]

如果类型为char的对象的值

C++相关问答推荐

有关字符数组指针和次指针以及qsort函数中的cmp函数的问题

C:gcc返回多个错误定义,但msvc—不""'

为什么我得到更多的256假阳性在PKZIP解密密钥验证?

在struct中调用函数,但struct在void中 *

*p[num]和(*p)num的区别

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

如果包含路径不存在,我的编译器可以被配置为出错吗?(GCC、MSVC)

使用sscanf获取零个或多个长度的字符串

判断X宏的空性

每次除以或乘以整数都会得到0.0000

将返回的char*设置为S在函数中定义的字符串文字可能会产生什么问题?

接受任何参数的函数指针是否与接受不同参数的函数兼容

变量的作用域是否在C中的循环未定义行为或实现定义行为的参数中初始化?

C将数组传递给函数以修改数组

是否定义了此函数的行为?

通过k&;r语法的c声明无效

为什么二进制文件的大小不会随着静态数据的大小而增加?

哪些C++功能可以在外部C块中使用

如何向 execl 创建的后台程序提供输入?

C语言程序流程解释