我正在阅读 xv6 内核的文件,但我无法理解以下内容的含义:
static int (*syscalls[])(void) = {
[SYS_fork] sys_fork,
[SYS_exit] sys_exit,
[SYS_wait] sys_wait,
[SYS_pipe] sys_pipe,
...
}
谁可以给我解释一下这个?尤其是方括号(例如 [SYS_fork])的含义。谢谢
该代码正在制作一个函数指针数组,使用旧的替代 GNU 扩展进行指定初始化。
指定初始化是在 C99 中添加到 C 中的一项功能,它允许您指定为数组分配特定值的数组索引,因此它们不需要按顺序排列。结构初始化也存在相同的功能,您可以在其中指定要为其分配给定值的特定字段。
数组指定初始化的 C99 语法是[index] = value
. 这段代码特别是使用 GCC 的旧替代语法,根据本文档,自 GCC 2.5 以来,该语法已过时,其中没有使用等号。
在syscall.c
索引中使用定义的宏指定syscall.h
,其中第一个定义为1
insyscall.h
等。
这很可能是初始化函数指针数组的非标准方式。标识符SYS_fork
等很可能是指定元素索引的宏或枚举常量。
另一种可能性是这不是 C 文件,而是在编译之前使用一些过滤工具将其转换为语法上有效的 C 文件。