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

在C中,[foo]=bar是什么意思?,c,C,我刚才在阅读中遇到了以下语法: static void (*handler[LASTEvent])(XEvent *) = { [KeyPress] = kpress, [ClientMessage] = cmessage, /* Removed some lines for brevity ... */ }; 我从来没有在C语言中见过这种语法,我甚至不知道用谷歌搜索是为了什么。我大致了解它的功能(将处理程序定义为函数指针数组),但我想更好地理解这种语法。它似乎至少在C

我刚才在阅读中遇到了以下语法:

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]);

如果我不得不大胆猜测的话,这似乎是某种索引数组初始化。@Ianoxx要求提供指向C标准的指针。第6.7.8段第17条中描述了“指定初始值设定人”。具体示例是示例9
0, 0, 9, 0, 1,