2011-07-15 198 views
0

我试图环绕在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 
}; 

我想要对结构进行名称初始化的原因是我自己的结构有许多成员,所以我希望更清晰。我不应该在单独的语句中初始化它们,因为这是一个性能敏感的嵌入式应用程序,其成员实际上是位域,因此单个结构体init会生成比多个成员体初始化更少的指令。

哪个C标准允许这样的名称成员初始化?

回答

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; 

我没有位域例如方便,但我不我不记得它在我的其他用途上有什么不同。

+0

我怀疑它是C99,可惜的是,HiTech和C18似乎都不支持这种语法。 – Reinderien

3

它不是立即清楚你问什么,但有C99编译,你的第一次尝试可以作为

struct 
{ 
    int a[5], b; 
} game[] = 
{ 
    [0] = {.a = { 1 }}, 
    [1] = {.a[0] = 2} 

};