簡體   English   中英

C 嵌套結構初始化

[英]C Nested Structs Initialization

我是一個狂熱的嵌入式 c 程序員。 我最近開始使用 ESP IDF 框架對 ESP32 進行編程。 即使我認為以下代碼正在初始化結構中的結構(不確定); 但由於某種原因,我無法理解在 gpio_config_t +“.mode”中只有一個“.mode”而不是結構名稱的方式和原因。 這只是一個示例,但有幾個類似類型的初始化實例。

例如:

typedef struct example_struct{
int mode;
int pull_up_en;
.
.
}example_struct;

typedef struct gpio_config_t
{
 example_struct test;
} gpio_config_t;

不應該按照以下方式進行初始化嗎?

gpio_config_t io_test_config = 
{
test.mode = 3; 
test.pull_up_en = 1; 
etc
};

有人可以澄清一下嗎?

我指的初始化的實際類型:

gpio_config_t io_conf = {
        .mode = GPIO_MODE_OUTPUT,
        .pull_up_en = 1,
    };

您使用的符號的技術術語是指定的初始化程序 指示符始終以. [ ,並且初始化程序中沒有分號(直到初始化程序末尾的}之后)。 您可以通過多種方式初始化該結構,包括:

gpio_config_t io_test_config1 = 
{
    .test.mode = 3, .test.pull_up_en = 1
};

gpio_config_t io_test_config2 = 
{
    .test = { .mode = 3, .pull_up_en = 1 }
};

gpio_config_t io_test_config3 = 
{
    { 3, 1 }
};

gpio_config_t io_test_config4 = 
{
    3, 1 
};

當您指定-Wmissing-braces (通常由-Wall激活)時,最后一個不能用 GCC 干凈地編譯。

暫無
暫無

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

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