Это член битового поля. Ваш код означает, что 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 не определяет, как битовые поля расположены или упакованы внутри "адресуемой единицы хранения". Кроме того, битовые поля работают медленнее, чем прямой доступ к членам.
Если я правильно помню, при использовании внутри структуры число после двоеточия означает, сколько битов составляют переменную (или битовое поле).
Итак, беззнаковый дамп: 1;
- однобитовое поле.
Это означает, что это битовое поле - т.е. размер дампа - один бит, и ему можно присвоить только 0 или 1. Обычно используется в старом коде для экономии места, или в низкоуровневом коде, который взаимодействует с аппаратурой (даже если упаковка не переносима). См. здесь для получения дополнительной информации