Keil中关于变量重复定义的报错
·
起因是我在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文件也可以链接到变量。

所有评论(0)