[英]Initializing a static const array
我正在尝试初始化该结构的静态const数组:
typedef struct{
UINT8 id_array[3];
} __attribute__((packed, aligned(1))) ST_ID;
我的初始化如下:
static const ST_ID msg_ids[3] =
{
/* Category A: Protocols */
{0x8A, 0x01, 0x01}, \
{0x8A, 0x02, 0x00}, \
{0x8A, 0x03, 0x00}, \
};
我在编译过程中收到警告:
'注释:((在'msg_ids'的初始化附近和'警告:在初始化程序[-Wmissing-braces]周围缺少括号)'
并且运行时的值不正确!
如果您想用牙套学究,那应该是
static const ST_ID msg_ids[3] =
{
{ { 0x8A, 0x01, 0x01 } },
{ { 0x8A, 0x02, 0x00 } },
{ { 0x8A, 0x03, 0x00 } },
};
这就是GCC希望您做的。
但是,我希望您的原始变体也能产生正确的值(尽管有恼人的GCC警告)。
PS为什么您坚持在初始化程序的每一行末尾使用\\
?
您严格需要一对大括号以包围struct
初始化程序,并需要一对以包围数组成员初始化程序。 从而:
static const ST_ID msg_ids[3] =
{
{ { 0x8A, 0x01, 0x01 } },
{ { 0x8A, 0x02, 0x00 } },
{ { 0x8A, 0x03, 0x00 } }
} ;
初始化程序会生成警告而不是错误,但是严格的遵守会使维护变得更加简单,例如,稍后您将一个成员添加到了结构中,而不仅仅是数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.