[英]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.