不代表其他编译器,但在gnu gcc编译器中,可以使用以下语法静态初始化数组:
struct some_struct {
unsigned *some_array;
} some_var = {
.some_array = (unsigned[]) { 1u, 2u, 3u, 4u, 5u, },
};
首先,我遇到了这个语法,它在寻找一个我关心的问题的答案,然后找到了this答案。但是我还没有找到任何涉及这种语法的gnu引用的链接。
如果有人告诉我这个语法的链接,我会非常感激的。谢谢您!
最佳答案
您可能找不到很多关于它的GNU文档,因为它不是GCC扩展—这是标准C语法的一部分,称为复合文本。它在C standard中定义,在第6.5.2.5节和第6.7.9节中(后者包括大括号之间的部分,这对于复合文字和静态初始化符都是相同的,因此标准只描述一次)。
您也可以使用此语法来描述动态对象值,而不仅仅是静态初始化,甚至可以独立于表达式中,而无需分配任何变量。复合文字实际上可以出现在变量名出现的任何地方:您可以将它们传递给函数,创建它们只是为了访问一个元素,获取它们的地址(您甚至可以分配给它们,尽管这并不明显)。
语法在所有c值类型中是统一的,可以用于创建数组(指定要用[N]=
设置的特定元素)、结构和联合(指定要用.field=
设置的特定元素)甚至数值类型(没有元素,所以不要指定,只需将值放在大括号之间)。语法的目的是为了使宏和代码生成器能够生成简单而一致的代码(此外,手工编写也很优雅)。