struct hpet : public description_table_header
{
uint8_t hardware_rev_id;
uint8_t comparator_count:5;
uint8_t counter_size:1;
uint8_t reserved:1;
uint8_t legacy_replacement:1;
pci_vendor_t pci_vendor_id;
address_structure address;
uint8_t hpet_number;
uint16_t minimum_tick;
uint8_t page_protection;
} __attribute__((packed));
Почему существует публикация после имени структуры, а также __attribute__((packed))
, почему упаковано внутри paranthesis???
Это таблица для HPET (High Precision Event Timer).
Код C++, а не C, как вы отметили его. Это довольно важная деталь.
public
здесь - спецификатор доступа для наследования (структура наследуется от description_table_header
). Это будет рассмотрено во всех хороших учебниках C++. Соответствующий вопрос здесь о SO: Различие между частным, общественным и защищенным наследованием. Спецификация public
для struct
фактически не нужна, поскольку для структуры, которая является значением по умолчанию.
__attribute__((packed))
является специфическим для компилятора расширением, определяющим макет struct
. В этом случае struct
упакована так, что в структуре нет прокладки.
В C++ двоеточие :
за которым следует дополнительный public
/private
/protected
указатель и имя типа - это синтаксис для указания наследования.
В вашем коде класс hpet
наследует класс description_table_header
.
См. Этот ответ для обсуждения различий между государственным, частным и защищенным наследованием.
C++
?packed
для выравнивания структуры.