我想在flash中创建一个常量结构。此结构将包含各种大小的元素,包括字符串数组,短路,字节等。字符串应为空终止,但可能不会完全填充为其分配的数组存储区域。下面显示的代码就是我所拥有的,但编译器会出现以下错误。
../Source/flash_constants.h:1025:33: error: expected ':', ',', ';', '}' or '__attribute__' before '=' token
const unsigned char Reg00[32] = "My String 1";
const unsigned char Reg00[32] = "My String 1";
是结构定义之外的有效语句,但在结构定义中失败。
感谢。
struct
{
const unsigned char Reg00[32] = "My String 1";
const unsigned char Reg01[32] = "My String 2";
const unsigned char Reg02[32] = "My String 3";
const unsigned short Reg03 = 0;
const unsigned short Reg04 = 0;
} ModBusIDReg;
答案 0 :(得分:3)
您无法在C中进行结构的内联初始化。
您需要定义结构,定义变量,然后初始化变量:
struct
{
const unsigned char Reg00[32];
const unsigned char Reg01[32];
const unsigned char Reg02[32];
const unsigned short Reg03;
const unsigned short Reg04;
} const ModBusIDReg = {
"My String 1",
"My String 2",
"My String 3",
0,
0
};
答案 1 :(得分:3)
您还可以使用指定的初始值设定项(C99),它不会限制您按固定顺序初始化成员:
struct
{
const unsigned char Reg00[32];
const unsigned char Reg01[32];
const unsigned char Reg02[32];
const unsigned short Reg03;
const unsigned short Reg04;
} const ModBusIDReg = {
.Reg01 = "My String 2",
.Reg00 = "My String 1",
.Reg02 = "My String 3",
};
未显式初始化的成员被初始化,就像实例具有静态持续时间一样,因为C没有部分初始化。