struct
{
int a[5], b;
} game[] =
{
[0].a = { 1 },
[1].a[0] = 2
};
理想情况下,我会找到一些方法来执行以下操作:
struct
{
int a, b;
} foo =
{
.a = 4,
.b = 5
};
我想要对结构进行按名称初始化的原因是我自己的结构有很多成员,所以我想要更清晰。我不应该在单独的语句中初始化它们,因为这是一个对性能敏感的嵌入式应用程序,其中成员实际上是位域,因此单个struct init生成的指令少于多个成员初始化。
哪个C标准允许这样的名字成员init?
答案 0 :(得分:3)
目前还不清楚你在问什么,但是使用c99编译器,你的第一次尝试可以写成
struct
{
int a[5], b;
} game[] =
{
[0] = {.a = { 1 }},
[1] = {.a[0] = 2}
};
答案 1 :(得分:1)
我在C99下的嵌入式应用程序中做了类似的事情。我有一个名为 phaseInstill 的变量,它被“赋值”给一个结构:
phaseInstill = (PhaseVolumeStatus)
{
.complete = false,
.ticksInstilled = 0,
.volumeInstilled = 0,
.volumeRemaining = instillVolume
};
其中PhaseVolumeStatus定义为:
typedef struct
{
Value volumeRemaining; /*!> ml */
Value volumeInstilled; /*!> ml */
Value ticksInstilled; /*!> ticks */
bool complete;
} PhaseVolumeStatus;
我没有方便的比特域示例,但我不记得它在我的任何其他用途中的工作方式有所不同。