| |
零长度数组
==========
GNU C 允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用。例
如:
++++ include/linux/minix_fs.h
85: struct minix_dir_entry {
86: __u16 inode;
87: char name[0];
88: };
结构的最后一个元素定义为零长度数组,它不占结构的空间。在标准 C 中则需要
定义数组长度为 1,分配时计算对象大小比较复杂。
例如在2.6内核的usb驱动当中,usb_hcd数据结构最后一个参数是
unsigned long hcd_priv[0] __attribute__ ((aligned (sizeof(unsigned long))));
就是定义了零长度数组,实际长度可在以后使用kmalloc来划分