在结构内静态初始化数组

mes*_*ngr 5 c arrays gcc gnu initialization

不会为其他编译器说话,但在GNU GCC编译器中,您可以使用以下语法静态初始化数组:

struct some_struct {
        unsigned *some_array;
} some_var = {
        .some_array = (unsigned[]) { 1u, 2u, 3u, 4u, 5u, },
};
Run Code Online (Sandbox Code Playgroud)

首先,我遇到了这种语法,寻找我所关心的问题的答案,并得出了这个答案.但我还没有找到任何GNU参考的链接,它涵盖了这种语法.

如果有人与我分享这个语法的链接,我将非常感激.谢谢!

Leu*_*nko 1

您可能不会找到太多关于此的 GNU 文档,因为它不是 GCC 扩展 - 这是称为复合文字的标准 C 语法的一部分。它在C 标准6.5.2.5 和 6.7.9 节中定义(后者覆盖了大括号之间的部分,对于复合文字和静态初始化器都是相同的,因此标准只描述了一次)。

您也可以使用此语法来描述动态对象值,而不仅仅是静态初始化,甚至可以单独存在于表达式中而不分配给任何变量。复合文字基本上可以出现在变量名可以出现的任何地方:您可以将它们传递给函数,创建它们只是为了访问一个元素,获取它们的地址(您甚至可以分配它们,尽管这有什么用并不明显)。

该语法在所有 C 值类型中都是统一的,可用于创建数组(使用 指定要设置的特定元素[N]=)、结构体和联合(使用 指定特定元素.field=)甚至数字类型(没有元素,因此不要指定,只需将大括号之间的值)。该语法旨在使宏和代码生成器生成简单且一致(除了手写优雅之外)。