【问题标题】:How to initialize array in an array of structs?如何在结构数组中初始化数组?
【发布时间】:2017-02-19 20:46:04
【问题描述】:

假设我的结构定义为:

typedef struct _TStruct {

    uint Values[3];

} TStruct;

然后我定义一个结构数组:

TStruct Data[3];

如何正确初始化这个结构数组中的数组?

【问题讨论】:

  • 引用的 dup 和 GCC 53119 bug 似乎在使用缺少大括号的 {0} 时浮出水面。这个问题似乎没有以这种方式初始化。

标签: c arrays gcc struct initialization


【解决方案1】:

要正确初始化结构数组中的数组,您需要执行以下操作:

typedef struct _TStruct {

    uint Values[3];

} TStruct;

TStruct Data[3] = {

    {{ 0x86, 0x55, 0x79 }}, {{ 0xaa, 0xbb, 0xcc }}, {{ 0x76, 0x23, 0x24 }}

}; 

注意每组值周围的双括号。额外的一对大括号对于避免出现以下 gcc 错误至关重要(仅当存在-Wall 标志时,它恰好被gcc-Wmissing-braces 标志“检测到”):

警告:初始化器周围缺少大括号

注意

  1. 使用双括号{{ }}不会改变内存中数据的布局

  2. MS Visual Studio C++ 编译器上不会出现此警告

另请参阅:

How to repair warning: missing braces around initializer?

GCC Bug 53319

【讨论】:

  • 您的问答是您提供的链接问答的副本。那为什么要发布呢?
  • @Jean-FrançoisFabre 没有关于如何在结构数组中初始化数组的问题/答案
  • 请注意,根据 C 标准,省略大括号也是正确的。额外的支撑只是“需要”解决编译器缺陷。
猜你喜欢
  • 2012-05-02
  • 1970-01-01
  • 2021-04-30
  • 2015-07-29
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多