在C中,[foo] = bar是什么意思?

时间:2015-10-12 17:02:06

标签: c

我刚刚在some code中阅读了st terminal emulator,并且遇到了这种语法:

static void (*handler[LASTEvent])(XEvent *) = {
    [KeyPress] = kpress,
    [ClientMessage] = cmessage,
    /* Removed some lines for brevity ... */
};

我从未在C中看过这种语法,我甚至不确定谷歌的用途。我粗略地了解它的作用(将处理程序定义为函数指针数组),但我想更好地理解这种语法。它似乎至少在C99中是有效的,但我正在寻找更多细节,为什么这是正确的,它是如何工作的,也许是指向定义这种语法的C标准的指针。

1 个答案:

答案 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,