三点运算符“...”用于初始化数组

bog*_*ose 1 c operators variadic-macros

考虑以下使用默认值初始化数组的示例:

static unsigned int array[10] = { [ 0 ... 9 ] = 5 };
Run Code Online (Sandbox Code Playgroud)

这个运算符到底是做什么的?

它与可变参数宏有关__VA_ARGS__

joH*_*oH1 5

在标准 C 中,自 C99 起,指定初始化器允许以以下形式初始化数组的各个元素:

int array[4] = {[1] = 42};
Run Code Online (Sandbox Code Playgroud)

您偶然发现的语法是范围初始值设定项,它是一个 GNU 扩展09用于将给定值之间的所有元素初始化为给定值,因此严格等效于:

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)

只是减少了打字和阅读的负担。

参考