0

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

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

}

谁可以给我解释一下这个?尤其是方括号(例如 [SYS_fork])的含义。谢谢

4

2 回答 2

1

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

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

数组指定初始化的 C99 语法是[index] = value. 这段代码特别是使用 GCC 的旧替代语法,根据本文档,自 GCC 2.5 以来,该语法已过时,其中没有使用等号。

syscall.c索引中使用定义的宏指定syscall.h,其中第一个定义为1insyscall.h等。

于 2015-02-25T22:24:08.840 回答
0

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

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

于 2015-02-25T21:00:42.670 回答