c - 三点运算符 "..."用于初始化数组

标签 c operators variadic-macros

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

static unsigned int array[10] = { [ 0 ... 9 ] = 5 };

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

与可变参数宏__VA_ARGS__有关吗?

最佳答案

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

int array[4] = {[1] = 42};

你偶然发现的语法是一个范围初始化器,它是一个 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};

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

Reference

关于c - 三点运算符 "..."用于初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56598905/

相关文章:

c++ - 未定义的 C/C++ 符号作为运算符

在 C 预处理器中转换十六进制字符串中的数字列表

c - 将参数传递给可变参数宏

c++ - c编程中的cin和cout

c - 在 sqlite3 中,调用步骤失败后是否需要重置?

javascript - 伪代码中的 "!"是什么意思?我知道 "!"代表阶乘,但我无法翻译它

c++ - 计数 __VA_ARGS__ MSVC 给出意想不到的结果

c - 使用按位运算乘以 3

c - 合并排序算法中递归划分函数的目的是什么?

c - C 中的运算符优先级 - 返回值