我正在读取xv6内核的文件,我无法理解以下含义:
static int (*syscalls[])(void) = {
[SYS_fork] sys_fork,
[SYS_exit] sys_exit,
[SYS_wait] sys_wait,
[SYS_pipe] sys_pipe,
...
}
有人可以向我解释一下吗?特别是方括号(例如[SYS_fork])的意思。 谢谢
答案 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文件。