【问题标题】:Initialize a constant array of struct with bitfield使用位域初始化结构的常量数组
【发布时间】:2019-08-20 12:15:32
【问题描述】:

我想初始化一个const 结构数组。这些结构具有位域成员。

以下是我的代码的 sn-p:

typedef struct {
    unsigned int a : 1;
    unsigned int b : 1;
    unsigned int c : 1;
} Character;

const static Character Char[] =
{
    {.a = 0, .b = 0, .c = 1},
    {.a = 0, .b = 1, .c = 0},
    {.a = 1, .b = 0, .c = 1}
};

尝试这种方式时,我遇到了很多错误,例如 unexpected initialization syntaxmissing ;

这样做的正确方法是什么?

更新

我正在使用COSMIC 编译器 (CXSTM8)。我查看了它的用户指南,但找不到这方面的任何信息。

【问题讨论】:

  • 你是如何构建代码的?什么是编译器标志?
  • 这是一个嵌入式项目。我正在使用COSMIC 编译器
  • edit您的问题添加信息,而不是在 cmets 中回答。编译器是否支持使用.member = value 进行结构初始化?
  • 为我编译。请生成minimal reproducible example
  • Initializer List 从 C99 开始引入。你有用 C99 编译的开关吗? Cosmic 编译器是否与 C99 兼容?

标签: c arrays struct bit-fields


【解决方案1】:

您给出的语法是正确的。 指定初始化列表是在 C99 中引入的。

如果您的编译器不支持这一点,您需要选择下一个最佳选项。即初始化位域中的所有成员。

typedef struct {
    unsigned int a : 1;
    unsigned int b : 1;
    unsigned int c : 1;
} Character;

const static Character Char[] =
{
    {0, 0, 1},
    {0, 1, 0},
    {1, 0, 1}
}; 

【讨论】:

    猜你喜欢
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2010-09-22
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多