繁体   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