假设我有以下结构:
typedef struct
{
unsigned field1 :1;
unsigned field2 :1;
unsigned field3 :1;
} mytype;
前 3 位将可用,但sizeof(mytype)
会返回4
,这意味着 29 位填充。我的问题是,标准是否保证这些填充位由语句初始化为零:
mytype testfields = {0};
或者:
mytype myfields = {1, 1, 1};
这样memcmp()
在第 4..29 位为零的假设下执行以下操作是安全的,因此不会影响比较:
if ( memcmp(&myfields, &testfields, sizeof(myfields)) == 0 )
printf("Fields have no bits set\n");
else
printf("Fields have bits set\n");