繁体   English   中英

初始化静态常量数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM