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

时间:2015-02-25 20:21:55

标签: c xv6

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

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

}

有人可以向我解释一下吗?特别是方括号(例如[SYS_fork])的意思。 谢谢

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

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