起因是我在sbus.h中定义了两个变量uint8_t sbus_rx_buffer[25] 和 uint16_t sbus_channels[16],而且这两个变量在sbus.c和main.c中都会用到,那我理所当然地认为在sbus.c和main.c中都包含这个头文件不就可以啦,但在编译时弹出变量重复定义的错误,如第一张图片所示。

后来用GPT询问了一下原因,原来是每个包含了 sbus.h 的 .c 文件(比如 main.c 和 sbus.c)都生成了一个变量副本,链接时就报 multiply defined,导致重复定义,罪魁祸首是在头文件里面定义了变量,头文件是原则上只声明,不定义。

解决办法是在.h文件里面的定义语句前面加上extern,含义就从定义变成声明了,然后在sbus.c里面再定义变量,这样包含.h文件的main.c文件也可以链接到变量。
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3188e6860c3643ccaf843ba7cb897c50.png

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐