用位域初始化结构常量数组
Initialize a constant array of struct with bitfield
我想初始化一个 const
结构数组。这些结构具有位域成员。
以下是我的代码片段:
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 syntax
和 missing ;
。
正确的做法是什么?
更新
我正在使用 COSMIC
编译器 (CXSTM8
)。我查看了它的用户指南,但找不到这方面的任何信息。
您提供的语法是正确的。 指定初始化程序列表 是在 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}
};
我想初始化一个 const
结构数组。这些结构具有位域成员。
以下是我的代码片段:
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 syntax
和 missing ;
。
正确的做法是什么?
更新
我正在使用 COSMIC
编译器 (CXSTM8
)。我查看了它的用户指南,但找不到这方面的任何信息。
您提供的语法是正确的。 指定初始化程序列表 是在 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}
};