Czy zerowa inicjalizacja struktur gwarantujących wycieranie obszarów wypełnionych?
Załóżmy, że mam następującą strukturę:
typedef struct
{
unsigned field1 :1;
unsigned field2 :1;
unsigned field3 :1;
} mytype;
Pierwsze 3 bity będą użyteczne, alesizeof(mytype)
wróci4
co oznacza 29 bitów wypełnienia. Moje pytanie brzmi, czy te bity dopełnienia są gwarantowane przez standard inicjowany przez zero:
mytype testfields = {0};
lub:
mytype myfields = {1, 1, 1};
Takie, że można bezpiecznie wykonać następujące czynnościmemcmp()
przy założeniu, że bity 4..29 będą równe zero, a zatem nie będą miały wpływu na porównanie:
if ( memcmp(&myfields, &testfields, sizeof(myfields)) == 0 )
printf("Fields have no bits set\n");
else
printf("Fields have bits set\n");