【发布时间】:2016-10-28 13:07:49
【问题描述】:
我正在尝试初始化结构的静态 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}, \
};
我在编译过程中收到警告:
'note: ('msg_ids' 和'warning: 在初始化器 [-Wmissing-braces] 周围缺少大括号'的初始化附近'
而且运行时的值不正确!!
【问题讨论】:
-
and the values in run time are not correct!!...minimal reproducible example 请。 -
什么是
UINT8?不要使用自制的固定宽度类型。请改用标准类型。 -
您不需要在每一行的末尾使用 `\` 换行符 - 这不是宏。
-
最后一个初始化器后面还有一个多余的逗号。
-
第一个警告是否完整?它本身没有多大意义。 GCC 可以将诊断信息拆分到一些 IDE 过滤掉的多行中 - 从原始编译器输出中发布文本,而不是任何过滤后的消息列表。