gpt4 book ai didi

c - C 内核模块中数组初始化中的省略号

转载 作者:太空狗 更新时间:2023-10-29 16:32:29 24 4
gpt4 key购买 nike

我正在检查 github 上的一些代码 https://github.com/umlaeute/v4l2loopback/blob/master/v4l2loopback.c并遇到了这条线,这让我感到困惑。这是一些我不知道的非常酷的内核宏或 gcc 功能吗? = -1 的作用是什么?

static int video_nr[MAX_DEVICES] = { [0 ... (MAX_DEVICES-1)] = -1 };
module_param_array(video_nr, int, NULL, 0444);
MODULE_PARM_DESC(video_nr, "video device numbers (-1=auto, 0=/dev/video0, etc.)");

有问题的行是第一行,接下来的两行是为上下文给出的(这是使用内核宏创建一个 cmdline 可指定参数 http://lxr.free-electrons.com/source/include/linux/moduleparam.h#L103 )

无论如何,数组初始化是怎么回事?该语法如何工作?

最佳答案

您找到了 designated initializers 的示例. C99 和 C11 并没有像您的示例那样走得那么远,但是它们对这种行为有一些非常灵活的支持。您的具体示例(使用 ...)是 GCC 扩展。来自链接:

To initialize a range of elements to the same value, write [first ... last] = value. This is a GNU extension. For example,

int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };

这意味着您的示例正在创建一个大小为 MAX_DEVICES 的数组,并将该数组中的每个元素初始化为 -1

作为引用,唯一受标准支持的行为是分配特定索引,而不是范围:

[constant-expression] = initializer-value

我的规范副本中有一个更复杂的示例:

int a[MAX] = {
1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0
};

将数组的前五个和后五个元素初始化为显式值。中间值(如果有的话)将为 0

关于c - C 内核模块中数组初始化中的省略号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14513067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com