为什么sizeof未命名的位域成员结构打印1?

时间:2017-11-23 18:01:22

标签: c structure sizeof bit-fields

在以下程序中,在结构中声明了未命名的位域成员。

#include <stdio.h>

struct st{
    int : 1;
};

int main()
{
    struct st s;
    printf("%zu\n",sizeof(s));  // print 1
}

以上程序打印输出1。

为什么sizeof(s)打印1

1 个答案:

答案 0 :(得分:4)

sizeof(s)undefined,因为结构中没有其他命名成员。

C11 6.7.2.1(P8):

  

struct-or-union-specifier中struct-declaration-list的存在声明了一个新类型,   在翻译单位内。 struct-declaration-list是一系列声明   结构或联盟的成员。 如果struct-declaration-list不包含named   成员,没有匿名结构,没有匿名联盟,行为未定义。   直到终止列表的}之后,类型才是完整的,并且完成   此后。

如果你这样写:

struct st{
        int : 1;
        int i : 5;
    };

所以,sizeof(s)没问题,因为结构中也有名为bit-field的成员。