c++ - C - 指定初始化程序 (xv6)

标签 c++ c lambda

这个问题在这里已经有了答案:





What is a designated initializer in C?

(2 个回答)


2年前关闭。




我最近正在学习操作系统类(class),我们在那里学习 xv6。在练习实验室中,我遇到了如下代码:

// xv6_public/syscall.c
#include "defs.h"
#include "syscalls.h"
...

extern int sys_fork(void);

...

static int (*syscalls[])(void) = {
    [SYS_fork]    sys_fork,
    ...
};

起初我根本不认识上面使用的语法。网上搜了一下,发现这个语法叫做 Lambda 函数 ,但我仍有疑问:
  • 许多文章说它只能与 C++ 一起使用 Lambda。它能够在 C 中使用 Lambda 吗?语法和C++一样吗? (源文件都是.c,可能编译器是g++)
  • 有人能简单解释一下上面的代码吗?我可以理解它是函数指针数组,其中每个元素都是 lambda 函数。或者请推荐很好的引用阅读。
  • 最佳答案

    这不是 C++ lambda,而是标准 C99 array initialization使用指定的初始化程序。

    方括号内的值(例如 [SYS_fork] )是编译时整数常量,并指定数组中用于初始化的索引。

    关于c++ - C - 指定初始化程序 (xv6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60882252/

    相关文章:

    java - 从 List<Map<K,V>> 到 List<V> 的转换(从 map 列表中获取所有唯一值)

    c++ - 删除元素后列表的最后一个元素损坏

    c++ - noexcept + declval 在 MSVC 下编译失败

    c++ 模板参数匹配 std::function 与函数指针

    c++ - 访问特定类的特定私有(private)成员

    康威的生命游戏 : extraneous cells being printed when program run with only blank/dead cells (C/SDL2)

    c - 在 for 循环中有效地打印每 x 次迭代

    c - 奇怪的字符保存在我的文本文件中

    c# - `Where` 中新对象的 Linq 查询性能

    c# - 使用一个数组中与 C# 中另一个数组中的值匹配的所有值创建一个数组