我正在尝试初始化struct的静态const数组:
typedef struct{
UINT8 id_array[3];
} __attribute__((packed, aligned(1))) ST_ID;
我按如下方式执行init:
static const ST_ID msg_ids[3] =
{
/* Category A: Protocols */
{0x8A, 0x01, 0x01}, \
{0x8A, 0x02, 0x00}, \
{0x8A, 0x03, 0x00}, \
};
我在编译期间收到警告:
'注意:(接近初始化'msg_ids'和'警告:在初始化程序周围缺少大括号[-Wateing-braces]'
并且运行时间的值不正确!!
答案 0 :(得分:3)
如果你想用大括号来迂腐,那么它应该是
static const ST_ID msg_ids[3] =
{
{ { 0x8A, 0x01, 0x01 } },
{ { 0x8A, 0x02, 0x00 } },
{ { 0x8A, 0x03, 0x00 } },
};
这是GCC希望你做的。
但是,我希望您的原始变体也能产生正确的值(尽管有令人讨厌的GCC警告)。
P.S。为什么你坚持在初始化程序内的每一行末尾使用\
?
答案 1 :(得分:0)
您严格需要一对大括号来封装struct
初始化程序和一对括起阵列成员初始化程序;因此:
static const ST_ID msg_ids[3] =
{
{ { 0x8A, 0x01, 0x01 } },
{ { 0x8A, 0x02, 0x00 } },
{ { 0x8A, 0x03, 0x00 } }
} ;
您的初始化程序会生成警告而不是错误,但严格遵守会使维护更简单,例如,您稍后会将某个成员添加到除结构之外的结构中。