Что означает: public после struct?

0
    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).

  • 7
    Я думаю, что это C++ ?
  • 1
    Это наследование структуры в C ++. packed для выравнивания структуры.
Теги:
operating-system

2 ответа

2
Лучший ответ

Код C++, а не C, как вы отметили его. Это довольно важная деталь.

public здесь - спецификатор доступа для наследования (структура наследуется от description_table_header). Это будет рассмотрено во всех хороших учебниках C++. Соответствующий вопрос здесь о SO: Различие между частным, общественным и защищенным наследованием. Спецификация public для struct фактически не нужна, поскольку для структуры, которая является значением по умолчанию.

__attribute__((packed)) является специфическим для компилятора расширением, определяющим макет struct. В этом случае struct упакована так, что в структуре нет прокладки.

2

В C++ двоеточие : за которым следует дополнительный public/private/protected указатель и имя типа - это синтаксис для указания наследования.

В вашем коде класс hpet наследует класс description_table_header.

См. Этот ответ для обсуждения различий между государственным, частным и защищенным наследованием.

  • 1
    это C ++ (который является отличным языком для низкоуровневого кода). Ваша структура публично наследуется (что может делать структура - так же, как классы)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню