static uint8_t togglecode[256] = {
[0x3A] CAPSLOCK,
[0x45] NUMLOCK,
[0x46] SCROLLLOCK
};
有什么意义[0x3A]
吗?我只学过像int a[2] = {1, 2};
Answers:
这意味着初始化数组的第n个元素。您给出的示例将意味着:
togglecode[0x3A] == CAPSLOCK
togglecode[0x45] == NUMLOCK
togglecode[0x46] == SCROLLLOCK
这些称为“指定的初始化程序”,实际上是C99标准的一部分。但是,没有的语法=
不是。从该页面:
自GCC 2.5起已经过时但GCC仍然接受的替代语法是
[index]
在元素值之前写入no=
。
它(接近)指定初始化器的语法(一种C99功能。
基本上,它初始化数组的一部分,例如;
int aa[4] = { [2] = 3, [1] = 6 };
将数组的第二个值初始化为6,将第三个值初始化为3。
在您的情况下,数组偏移恰好是十六进制(0x3a),它将数组的第58个元素初始化为CAPSLOCK的值,该值大概在您显示的代码上方的代码中定义。
您代码中没有的版本=
似乎是gcc特定的扩展名。