Гарантируется ли нулевая инициализация структур, чтобы стереть заполненные области?
Предположим, у меня есть следующая структура:
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");