簡體   English   中英

通過命名成員初始化結構

[英]Initializing structure by named members

我試圖圍繞http://publib.boulder.ibm.com/infocenter/lnxpcomp/v7v91/index.jsp?topic=%2Fcom.ibm.2ref%7l.doc%2Flanguage% 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 標准允許這樣的按名稱成員初始化?

目前尚不清楚您要問什么,但是使用 c99 編譯器,您的第一次嘗試可以寫成

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

};

我在 C99 下的嵌入式應用程序中做類似的事情。 that is "assigned" to a struct:我有一個名為的變量,它被“分配”給一個結構:

    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;

我沒有方便的位域示例,但我不記得它在我的任何其他用途中的工作方式有什么不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM