初始化一个恒定的结构

时间:2018-05-08 18:52:18

标签: c struct const

我想在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;

2 个答案:

答案 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没有部分初始化。