按命名成员初始化结构

时间:2011-07-15 15:00:31

标签: c data-structures struct initialization

我试图围绕http://publib.boulder.ibm.com/infocenter/lnxpcomp/v7v91/index.jsp?topic=%2Fcom.ibm.vacpp7l.doc%2Flanguage%2Fref%2Fclrc03strin.htm中提供的语法:

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?

2 个答案:

答案 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;

我没有方便的比特域示例,但我不记得它在我的任何其他用途中的工作方式有所不同。