需要帮助来理解 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
。
我正在阅读 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
。