2011-07-15 66 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} 

};