bog*_*ose 1 c operators variadic-macros
考虑以下使用默认值初始化数组的示例:
static unsigned int array[10] = { [ 0 ... 9 ] = 5 };
Run Code Online (Sandbox Code Playgroud)
这个运算符到底是做什么的?
它与可变参数宏有关__VA_ARGS__?
在标准 C 中,自 C99 起,指定初始化器允许以以下形式初始化数组的各个元素:
int array[4] = {[1] = 42};
Run Code Online (Sandbox Code Playgroud)
您偶然发现的语法是范围初始值设定项,它是一个 GNU 扩展0,9用于将给定值之间的所有元素初始化为给定值,因此严格等效于:
static unsigned int array[10] = { [0] = 5, [1] = 5, [2] = 5, [3] = 5, [4] = 5, [5] = 5, [6] = 5, [7] = 5, [8] = 5, [9] = 5};
Run Code Online (Sandbox Code Playgroud)
只是减少了打字和阅读的负担。