c89标准要求实现提供哪些特定于硬件的定义?

c89标准要求实现提供哪些特定于硬件的定义?,c,standards,c89,C,Standards,C89,c(89)标准是否规定了实现必须定义的某些硬件属性?例如,在我的Linux系统上,有一个定义为\uuuuuWordSize(定义为64)-我可以期望在每个符合c(89)的系统上定义\uuuuuWordSize?c标准是否要求实现提供其他特定于硬件的值 CHAR\u BIT浮现在我的脑海中(参见C11标准草案的5.2.4.2.1/1) 它定义非位字段的最小整数的宽度(位数)。在最近的系统上,这通常是8 尽管如此,这是否必须被视为硬件属性仍有争议 C试图抽象硬件属性。这可能是它传播的一个(主要?)原

c(89)标准是否规定了实现必须定义的某些硬件属性?例如,在我的Linux系统上,有一个定义为
\uuuuuWordSize
(定义为64)-我可以期望在每个符合c(89)的系统上定义
\uuuuuWordSize
?c标准是否要求实现提供其他特定于硬件的值

CHAR\u BIT
浮现在我的脑海中(参见C11标准草案的5.2.4.2.1/1)

它定义非位字段的最小整数的宽度(位数)。在最近的系统上,这通常是8

尽管如此,这是否必须被视为硬件属性仍有争议


C试图抽象硬件属性。这可能是它传播的一个(主要?)原因。

CHAR\u BIT
浮现在我的脑海中(见C11标准草案的5.2.4.2.1/1)

它定义非位字段的最小整数的宽度(位数)。在最近的系统上,这通常是8

尽管如此,这是否必须被视为硬件属性仍有争议


C试图抽象硬件属性。这可能是它蔓延的一个(主要?)原因。

C89指定了由
限制提供的限制。h

如前所述,唯一真正特定于硬件的是
CHAR\u BIT
,其他的是特定于实现的

至于
\uuuuuuWordSize
,这不是一个标准的定义,单词大小应该是多少也值得怀疑

您始终可以使用一个巧妙的宏来确定类型中的位数,例如,在此处引用它:

/* Number of bits in inttype_MAX, or in any (1<<b)-1 where 0 <= b < 3E+10 */
#define IMAX_BITS(m) ((m) /((m)%0x3fffffffL+1) /0x3fffffffL %0x3fffffffL *30 \
                  + (m)%0x3fffffffL /((m)%31+1)/31%31*5 + 4-12/((m)%31+3))
但这真的是字号吗?在x86_64上,结果为32位,而指针为64位

使用C99及更高版本,您可以使用

IMAX_BITS((uintptr_t)-1)

但是请注意,只有能够握住指针才需要
uintpttr\u t
,指针可能更大。

C89指定了
limits.h
提供的限制

如前所述,唯一真正特定于硬件的是
CHAR\u BIT
,其他的是特定于实现的

至于
\uuuuuuWordSize
,这不是一个标准的定义,单词大小应该是多少也值得怀疑

您始终可以使用一个巧妙的宏来确定类型中的位数,例如,在此处引用它:

/* Number of bits in inttype_MAX, or in any (1<<b)-1 where 0 <= b < 3E+10 */
#define IMAX_BITS(m) ((m) /((m)%0x3fffffffL+1) /0x3fffffffL %0x3fffffffL *30 \
                  + (m)%0x3fffffffL /((m)%31+1)/31%31*5 + 4-12/((m)%31+3))
但这真的是字号吗?在x86_64上,结果为32位,而指针为64位

使用C99及更高版本,您可以使用

IMAX_BITS((uintptr_t)-1)

但是请注意,只有能够容纳指针才需要
uintpttr\u t
,指针可能更大。

“c(89)标准是否规定了必须由实现定义的某些硬件属性?”现在,虽然标准本身需要花钱,但您可以很容易地找到免费在线阅读的草稿。批准前的最后一份草案通常与当时的标准相同。完整的列表在您引用的标准中指明,因此您可以放心地假设出现的唯一标识符是文档中出现的标识符。“c(89)标准是否规定了实现必须定义的某些硬件属性?”现在,虽然标准本身需要花钱,但你可以很容易地找到在线免费阅读的草稿。批准前的最后一份草案通常与当时的标准相同。完整的列表在您引用的标准中显示,因此您可以放心地假设出现的唯一标识符是文件中出现的标识符。或在2.2.4.2数字限制下出现的标识符
\u WORDSIZE
是编译器内部的,正如这里所说的:uv'ing,仍然是一个问题:
CHAR\u BIT
与硬件属性无关的论点是什么?@FelixPalmen:我可以想象在9位硬件上使用每“字节”8位的C实现。在8.5位硬件上可能有意义(每个偶数字节为8位,每个奇数字节为9位);-)或在2.2.4.2数值限制下
\u WORDSIZE
是编译器内部的,正如这里所说的:uv'ing,仍然是一个问题:
CHAR\u BIT
与硬件属性无关的论点是什么?@FelixPalmen:我可以想象在9位硬件上使用每“字节”8位的C实现。在8.5位硬件上可能有意义(每个偶数字节为8位,每个奇数字节为9位);-)" (1@chux不,它确实适用于(假设的)像这样的大数字。请参阅原始答案以及一些usenet帖子的链接,以获取解释。是的,我现在看到了。”(1@chux不,它确实适用于(假设的)像这样的大量数字。请参阅原始答案以及一些usenet帖子的链接以获取解释。是的,我现在看到了。