C或C++中位域的最大大小是多少?

13
有没有在C或C++中指定位字段中可以指定的位数的限制?例如,我可以这样做吗:

可能是重复的:
struct bitfield max size (C99, C++)

例如,我可以在位字段中指定超过一定数量的位吗?

struct HugeInt {
    int myInt: 1000;
};

我问的是C和C++,因为我知道语言规范有时不同,想知道上面的例子是否保证在C或C++中起作用/不起作用。


这不是和这个一样吗?https://dev59.com/_XE85IYBdhLWcg3wtV1T - P.P
@KingsIndian- 是的,你说得对。我第一次错过了那个! - templatetypedef
好的,已投票关闭。我最近读了另一个 :) - P.P
@KingsIndian- 我也投票关闭了这个问题。 :-) 我通常更擅长避免重复的问题。 - templatetypedef
你需要1000位整数干嘛?也许你应该看看GMP(GNU多精度库),http://gmplib.org。许多GNU工具,如bc(1),使用它来处理大整数。 - vonbrand
1
@vonbrand- 这只是出于好奇问的。我知道有适用于长位字段和高精度整数的很好的库。 - templatetypedef
2个回答

16
在C11中,第6.7.2.1节,第4条款规定:

指定位域宽度的表达式应该是一个非负值的整数常量表达式,并且不应该超过省略冒号和表达式后所得到的类型对象的宽度。如果这个值为零,则声明不应包含声明符。

简而言之,它必须在零和该类型的大小之间,如果没有位域部分的话。

正如原问题的答案所示,在C++中这样做是合法的,但这样做多余的位基本上会被忽略。 - templatetypedef
我们如何知道对象的宽度? - David G
@David:sizeof(type)* CHAR_BIT,其中 type 是您的类型,它必须是 _Boolsigned intunsigned int 或其他实现定义类型的限定或非限定版本。 - icktoofay

0

位域'myInt'的大小(1000位)不能超过其类型的大小(int,通常为32位)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接