c - 我在 linux 内核中发现了一些奇怪的代码,有人可以向我解释一下吗?

标签 c linux-kernel

我在 initramfs.c 中找到了这个,我以前没见过这个语法,有人能解释一下它在做什么吗?

static __initdata int (*actions[])(void) = {
  [Start]   = do_start,
  [Collect] = do_collect,
  [GotHeader] = do_header,
  [SkipIt]  = do_skip,
  [GotName] = do_name,
  [CopyFile]  = do_copy,
  [GotSymlink]  = do_symlink,
  [Reset]   = do_reset,
};

源代码(第 366 行):initramfs.c

最佳答案

这是一个按索引初始化的乱序数组。就像写作一样

actions[Start] = do_start;
actions[Collect] = do_collect;

除了您可以将其作为静态初始值设定项之外。

关于c - 我在 linux 内核中发现了一些奇怪的代码,有人可以向我解释一下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2241448/

相关文章:

linux - 带独立应用程序的嵌入式 Linux

linux - 如何让一个 linux 模块加载另一个模块?

linux-kernel - Linux内核中的人类可读时间戳

linux - 如何在内核模块 Makefile 中提供包含目录路径

c - 为什么C文件会以/*[]*/结尾

c - 为双指针赋值

c - 有没有一种简单的方法可以从源代码中找到哪些其他函数可以调用某个函数?

c - 使用数组时的linux设备驱动程序container_of宏

c - C 函数调用中后缀或前缀递增的未定义行为

c - 在 C 中使用 memset() 的最佳技术