#include <stdio.h>
int main() {
struct on_off {
unsigned light : 1;
unsigned toaster : 1;
int count;/* 4 bytes */
unsigned ac : 4;
unsigned : 4;
unsigned clock : 1;
unsigned : 0;
unsigned flag : 1;
} kitchen;
struct box_props {
unsigned int opaque : 1;
unsigned int fill_color : 3;
unsigned int : 4;
unsigned int show_border : 1;
unsigned int border_color : 3;
unsigned int border_style : 2;
unsigned int : 2;
} s;
printf("\n\nSize of struct on_off = %d\n", sizeof(struct on_off));
printf("\nSize of box_props = %d\n", sizeof(struct box_props));
return 0;
}
О составлении этой программы Размер struct on_off
, как сообщается 16
тогда Размер box_props
сообщается в 4
. Может ли кто-нибудь объяснить причину, почему это происходит?C Битовые поля Размер структур
Могут быть потому что упростить выравнивание? Кстати, вы вызывают * неопределенное поведение *, передавая данные, имеющие неправильный тип, 'printf()'. '% zu', а не'% d', следует использовать для печати 'size_t', который возвращается из оператора' sizeof'. – MikeCAT