有人可以向我解释一下这个函数的语法吗?其中SYS_fork是常量,sys_fork是一个函数.
static int (*syscalls[])(void) = {
[SYS_fork] sys_fork,
[SYS_exit] sys_exit,
[SYS_wait] sys_wait,
[SYS_pipe] sys_pipe,
[SYS_read] sys_read,
[SYS_kill] sys_kill,
[SYS_exec] sys_exec,
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
use*_*016 26
您刚刚遇到使用指定的初始化程序.它们存在于C99中,也可用作GCC扩展,广泛用于Linux内核代码(以及其他).
来自文档:
在ISO C99中,您可以按任何顺序给出[数组]元素,指定它们适用的数组索引或结构字段名称,GNU C也允许它作为C90模式的扩展.[...]
要指定数组索引,请在元素值之前写入"[index] =".例如,
Run Code Online (Sandbox Code Playgroud)int a[6] = { [4] = 29, [2] = 15 };相当于:
Run Code Online (Sandbox Code Playgroud)int a[6] = { 0, 0, 15, 0, 29, 0 };[...]
自GCC 2.5以来已经过时的替代语法已经过时,但GCC仍然接受的是在元素值之前写'[index]',没有'='.
简单来说,syscalls是一个指向函数获取void和返回的指针的静态数组int.数组索引是常量,它们的相关值是相应的函数地址.
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |