Ответ 1
Это член bitfield. Ваш код означает dumpable
занимает ровно 1 бит в структуре.
Битвые поля используются, когда вы хотите упаковывать элементы на уровне бит. Это может значительно уменьшить размер используемой памяти, когда в структуре имеется много флагов. Например, если мы определим структуру, состоящую из 4 членов с известным числовым ограничением
0 < a < 20
b in [0, 1]
0 < c < 8
0 < d < 100
тогда структура может быть объявлена как
struct Foo {
unsigned a : 5; // 20 < 2^5 = 32
unsigned b : 1; //
unsigned c : 3; //
unsigned d : 7; // 100 < 2^7 = 128
};
тогда биты Foo могут быть расположены как
ddddddd c cc b aaaaa
--------- --------- --------- ----------
octet 1 octet 0
===========================================
uint32
вместо
struct Foo {
unsigned a;
unsigned b;
unsigned c;
unsigned d;
};
в котором много бит теряются из-за диапазона значений
# wasted space which is not used by the program
# v v
ddddddd ccc
------------------------------------ ------------------------------------
uint32 uint32
b aaaaa
------------------------------------ ------------------------------------
uint32 uint32
чтобы вы могли сэкономить место, объединив множество членов.
Обратите внимание, что в стандарте C не указывается, как битовые поля расположены или упакованы в "адресный блок хранения". Кроме того, битовые поля медленнее по сравнению с прямым доступом членов.