在标准 C 里,数组或结构变量的初始化值必须以固定的顺序出现,而在 GCC 中,通过指定索引或结
构域名,则允许初始化值以任意顺序出现。
指定数组索引的方法是在初始化值前写“[INDEX] =”
,还可以使用“[FIRST ... LAST] =”的形式指定
一个范围,比如:
++++ arch/ia64/kernel/acpi.c
132 int platform_intr_list[ACPI_MAX_PLATFORM_INTERRUPTS] = {
133 [0 ... ACPI_MAX_PLATFORM_INTERRUPTS - 1] = -1
134 };
将数组 platform_intr_list 的任何元素都初始化为-1。
对于结构初始化,比如:
++++ fs/ext2/file.c
42 const struct file_operations ext2_file_operations = {
43 .llseek = generic_file_llseek,
44 .read = do_sync_read,
45 .write = do_sync_write,
46 .aio_read = generic_file_aio_read,
47 .aio_write = generic_file_aio_write,
48 .ioctl = ext2_ioctl,
49 #ifdef CONFIG_COMPAT
50.compat_ioctl= ext2_compat_ioctl,
51 #endif
52 .mmap= generic_file_mmap,
53 .open= generic_file_open,
54 .release = ext2_release_file,
55 .fsync
56 .splice_read = generic_file_splice_read,
57 .splice_write
= ext2_sync_file,
= generic_file_splice_write,
58 }
genenric_file_read,依次类推。使用这种形式,当结构体的定义变化导致元素的偏移位置改变时,仍然可
以确保已知元素的正确性。对于未出现在初始化中的元素,其初值为 0。