【发布时间】:2011-03-20 04:22:45
【问题描述】:
Sizeof() 在应用于位域时不起作用:
# cat p.c
#include<stdio.h>
int main( int argc, char **argv )
{
struct { unsigned int bitfield : 3; } s;
fprintf( stdout, "size=%d\n", sizeof(s.bitfield) );
}
# gcc p.c -o p
p.c: In function ‘main’:
p.c:5: error: ‘sizeof’ applied to a bit-field
...显然,因为它不能返回浮点部分大小或其他东西。然而,它提出了一个有趣的问题。 是否有在 C 中的等价物可以告诉您变量/类型中的位数?理想情况下,除了位域之外,它也适用于常规类型,例如 char 和 int。
更新:
如果对于位域没有与 sizeof() 等效的语言,那么计算它的最有效方法是什么 - 在运行时!想象一下,您有依赖于此的循环,并且如果您更改位域的大小,您不希望它们中断 - 并且没有公平的作弊并使位域大小和循环长度成为宏。 ;-)
【问题讨论】:
-
很确定结构的布局是在编译时确定的。因此,虽然原则上它可以在运行时检查(尽管 C 没有提供这样做的方法,如果我正确阅读下面的答案),一旦编译发生(使用特定平台上的特定编译器;当然,它可能会因编译器和平台、基于字边界优化等而有所不同。
标签: c sizeof bit-fields