我只是在第一个终端模拟器中阅读一些代码,遇到了这样的语法:
static void (*handler[LASTEvent])(XEvent *) = {
[KeyPress] = kpress,
[ClientMessage] = cmessage,
/* Removed some lines for brevity ... */
};
我从来没有在C中见过这种语法,我甚至不知道该用谷歌搜索什么。我对它的作用有一个粗略的概念(将处理程序定义为函数指针数组),但我想更好地理解这种语法。它似乎至少在C99中是有效的,但我正在寻找一些更多的细节,为什么这是正确的,它是如何工作的,也许是指向C标准的指针,在那里定义了这种语法。
这是用枚举索引初始化一个函数指针数组。看到这里。
如下面的注释中提到的,使用指定初始化式。
这个简短的例子应该展示如何使用它。
enum indexes {ZERO, ONE, TWO, FOUR=4};
int array[5] = {[FOUR]=1, [TWO]=9};
for(int i = 0; i < 5; i++)
printf("%d, ", array[i]);
打印出
0, 0, 9, 0, 1,