需要帮助来理解 xv6 内核中的语法

Need help to understand the syntax in xv6 kernel

我正在阅读 xv6 内核的文件,我无法理解以下内容的含义:

static int (*syscalls[])(void) = {
 [SYS_fork]    sys_fork,
 [SYS_exit]    sys_exit,
 [SYS_wait]    sys_wait,
 [SYS_pipe]    sys_pipe,
...

}

谁能给我解释一下?特别是方括号(例如 [SYS_fork])的意思。 谢谢

这很可能是初始化函数指针数组的非标准方式。标识符 SYS_fork 等很可能是指定元素索引的宏或枚举常量。

另一种可能性是这不是 C 文件,而是在编译之前使用一些过滤工具变成了语法上有效的 C 文件。

该代码正在创建函数指针数组,使用旧的替代 GNU 扩展进行指定初始化。

指定初始化是在 C99 中添加到 C 中的一项功能,它允许您指定为数组分配特定值的数组索引,因此它们不需要按顺序排列。结构初始化存在相同的功能,您可以在其中指定特定字段以分配给定值。

数组指定初始化的 C99 语法是 [index] = value。这段代码特别使用了 GCC 中较旧的替代语法,根据 this document 自 GCC 2.5 以来已过时,其中不使用等号。

syscall.c 中,索引是使用 syscall.h 中定义的宏指定的,其中第一个在 syscall.h、et.c 中定义为 1