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(高精度事件计时器)的表格。
答案 0 :(得分:2)
在C ++中,冒号:
后跟可选的public
/ private
/ protected
指示符,类型名称是指定继承的语法。
在您的代码中,hpet
类继承description_table_header
类。
有关公共,私有和受保护继承之间差异的讨论,请参阅this answer。
答案 1 :(得分:2)
代码是C ++而不是C标记它。这是一个非常重要的细节。
public
这里是继承的访问说明符(结构继承自description_table_header
)。这将包含在所有优秀的C ++教科书中。关于SO的相关问题是:Difference between private, public, and protected inheritance。实际上并不需要public
struct
的规范,因为对于结构来说,这是默认值。
__attribute__((packed))
是特定于编译器的扩展,用于指定struct
的布局。在这种情况下,struct
被打包,以便结构中没有填充。