初始化静态const数组

时间:2016-06-26 12:06:42

标签: c embedded

我正在尝试初始化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]'

并且运行时间的值不正确!!

2 个答案:

答案 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 } }
} ;

您的初始化程序会生成警告而不是错误,但严格遵守会使维护更简单,例如,您稍后会将某个成员添加到除结构之外的结构中。