C语言的这种风格是什么?
从sys.c行123:
void *sys_call_table[__NR_syscalls] = { [0 ... __NR_syscalls-1] = sys_ni_syscall, #include <asm/unistd.h> };
sys_call_table
是一个通用的数组指针,我可以看到。 但是什么是符号:
[0 ... __NR_syscalls-1]
什么是...
?
编辑:
我在这里学到了另外一个C技巧: #include <asm/unistd.h>
将被预处理并replace为其内容,并被分配给[0 ... _NR_syscalls-1]
。
这是使用指定的初始化程序初始化 。
基于范围的初始化是gnu gcc扩展。
要将一系列元素初始化为相同的值,请写
[first ... last] = value
。 这是一个GNU扩展。 例如,int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
这不是便携式的。 用-pedantic
编译告诉你。
它在这里如何工作?
预处理器用基于范围的构造中的实际内容( 它定义各种符号常量和types,并声明各种函数 )replace#include <asm/unistd.h>
,然后进一步用于初始化指针数组。