如果这个代码出现在linux内核里面,你们怎么想?

subtypes[n].parse(state, bdev, START_SECT(p)*sector_size, NR_SECTS(p)*sector_size, slot);

很像是对象数组调用方法吧,很多人可能甚至会猜想这个东西是虚函数。问题是,大家记得吗?linux内核,是C的!

事实上,这是声明。

static struct {
	unsigned char id;
	void (*parse)(struct parsed_partitions *, struct block_device*, u32, u32, int);
};

怎么想?这个是方法映射。技术上讲,和虚函数属于同种类的应用(dymanic binding)。当然,数据结构有差异。虚函数要先根据n确定对象位置,根据v_ptr确定虚函数表,根据虚函数表定位了函数入口。而这里是根据n定位了对象,然后直接找到了函数入口。

可是,还是被骗了……

PS.谨以此纪念首次在GNU/GPL下引用Linux内核源码用于程序开发,因为分区系统资料该死的不清楚!