在结构内静态初始化数组

催眠者

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

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

首先,我遇到了这种语法,以寻找我所关心的问题的答案,然后得出这个答案。但是我还没有找到涉及这种语法的GNU参考链接。

如果有人向我分享此语法的链接,我将不胜感激。谢谢!

留申科

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档