我刚刚在some code中阅读了st terminal emulator,并且遇到了这种语法:
static void (*handler[LASTEvent])(XEvent *) = {
[KeyPress] = kpress,
[ClientMessage] = cmessage,
/* Removed some lines for brevity ... */
};
我从未在C中看过这种语法,我甚至不确定谷歌的用途。我粗略地了解它的作用(将处理程序定义为函数指针数组),但我想更好地理解这种语法。它似乎至少在C99中是有效的,但我正在寻找更多细节,为什么这是正确的,它是如何工作的,也许是指向定义这种语法的C标准的指针。
答案 0 :(得分:13)
这是用枚举索引初始化一个函数指针数组。请参阅here。
如下面评论中所述,使用Designated Initializers。
这个简短的例子应该说明如何使用它。
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,