结构内部结构的并集-混合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
};