我正在检查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.)");
Run Code Online (Sandbox Code Playgroud)
有问题的行是第一个,后两个用于上下文(这是使用内核宏创建cmdline可指定的参数http://lxr.free-electrons.com/source/include/linux/moduleparam.h#L103)
无论如何,数组初始化发生了什么?该语法如何工作?
Car*_*rum 16
您已经找到了指定初始值设定项的示例.C99和C11并没有达到你的例子,但他们对这种行为有一些非常灵活的支持.您的具体示例(使用...)是GCC扩展.从链接:
要将一系列元素初始化为相同的值,请写入
[first ... last] = value.这是一个GNU扩展.例如,Run Code Online (Sandbox Code Playgroud)int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
这意味着您的示例是创建一个大小数组MAX_DEVICES并初始化该数组中的每个元素-1.
作为参考,唯一标准支持的行为是分配特定索引而不是范围:
[constant-expression] =初始化值
我的规范副本中有一个更复杂的例子:
int a[MAX] = {
1, 3, 5, 7, 9, [MAX-5] = 8, 6, 4, 2, 0
};
Run Code Online (Sandbox Code Playgroud)
其中将数组的前五个和后五个元素初始化为显式值.中间值(如果有的话)将是0.