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

lan*_*oxx 14 c

我只是在st终端模拟器中读取一些代码并遇到了这种语法:

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

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

jay*_*ant 13

这是用枚举索引初始化一个函数指针数组.看到这里.

如下面的评论中所述,使用指定的初始化程序.

这个简短的例子应该说明如何使用它.

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]);
Run Code Online (Sandbox Code Playgroud)

打印出来

0, 0, 9, 0, 1,
Run Code Online (Sandbox Code Playgroud)

  • @Ianoxx要求指向C标准."指定的初始化器"在第6.7.8条第17款中有所描述.具体示例是示例9 (2认同)