结构内部结构的并集-混合C和C++; 我不太熟悉C编程,尝试将一些代码从C中移植到一个叫做ESP32的嵌入式设备C++程序中(用C99编译,使用GCC)。这些库大多是C语言的,我知道这会带来一些挑战。该结构在.h文件中定义,我尝试在cpp文件中初始化该结构
当我发现一个包含未命名的结构并集的结构时,遇到了一个问题。 逻辑似乎相当简单:结构内部结构的并集-混合C和C++; 我不太熟悉C编程,尝试将一些代码从C中移植到一个叫做ESP32的嵌入式设备C++程序中(用C99编译,使用GCC)。这些库大多是C语言的,我知道这会带来一些挑战。该结构在.h文件中定义,我尝试在cpp文件中初始化该结构,c++,c,esp32,C++,C,Esp32,当我发现一个包含未命名的结构并集的结构时,遇到了一个问题。 逻辑似乎相当简单: typedef struct{ i2c_mode_t mode; gpio_num_t sda_io_num; gpio_pullup_t sda_pullup_en; gpio_num_t scl_io_num; gpio_pullup_t scl_pullup_en; union{ struct { uint32_t clk_speed;
typedef struct{
i2c_mode_t mode;
gpio_num_t sda_io_num;
gpio_pullup_t sda_pullup_en;
gpio_num_t scl_io_num;
gpio_pullup_t scl_pullup_en;
union{
struct {
uint32_t clk_speed;
} master;
struct {
uint8_t addr_10bit_en;
uint16_t slave_addr;
} slave;
};
}i2c_config_t;
当试图通过初始化结构来访问其成员时,它会抱怨:
“匿名联合成员的指示符只能出现在与该匿名联合对应的大括号内”
这可能是一些基本的、简单的解决方案,但如果知道是什么导致了这一点,那就太好了
假设当我将初始化器放置在CPP文件中时,抱怨开始,并且在初始化Stutt时可能需要使用标准C++。p>
但是如何在未命名联合体内部的结构上执行此操作?与编译器错误无关,这是一个非常可疑的联合体。考虑使用单独的变量,我关心的是,这些比特不匹配。为什么在32位结构和24位结构上都使用并集?这是一个等待发生的内存泄漏/错误长话短说:Arduino只是这里的一个主要负担,尝试创建一个干净的C项目,所有问题都会消失。我不确定是否整个结构都转储到设备上。我假设这些值在写入设备之前已在更大的实体中使用。Arduino未被使用。。。。我们正在使用设备供应商提供的库。C++应该很好地工作,因为我们已经测试了几个实现。
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = i2c_gpio_sda,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_io_num = i2c_gpio_scl,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = i2c_frequency
};