1.битные поля могут быть не шире
Допустим, вам нужно битовое поле длиной 200 бит.
struct my_struct {
int my_field:200; /* Illegal! No integer type has 200 bits --> compile error!
} v;
2.Битовое поле не должно перекрывать границы базовой переменной
Допустим, вам нужны два 30-битных битовых поля и что компилятор использует 32-битное целое число в качестве базовой переменной.
struct my_struct {
unsigned int my_field1:30;
unsigned int my_field2:30; /* Without padding this field will overlap a 32-bit boundary */
} v;
Обычно компилятор автоматически добавляет отступы, генерируя структуру со следующим макетом:
struct my_struct {
unsigned int my_field1:30;
:2 /* padding added by the compiler */
unsigned int my_field2:30; /* Without padding this field will overlap a 32-bit boundary */
:2 /* padding added by the compiler */
} v;