标题: 当C文件中含有多种类似图中的.C和.h文件时,需要怎么做可以避免类似重复定义的问题? [打印本页]

作者: 嘿嘿嘿a    时间: 2020-4-30 14:53
标题: 当C文件中含有多种类似图中的.C和.h文件时,需要怎么做可以避免类似重复定义的问题?

WULPM~3VKDU3I}_64~_KK%F.png (208.94 KB, 下载次数: 64)

WULPM~3VKDU3I}_64~_KK%F.png

作者: 黄youhui    时间: 2020-4-30 14:53
重复定义可以是函数名重复定义,变量重复定义。避重定义的方法:

1不要在.h文件里面定义全局变量,在,c文件的全局变量要和局内变用不同方式命名,比如全局变用下划线开头
2宏定义尽量放在.c文件,如果要在.h文件里存放宏定义最好在加上附属名字,比如
#define LCD_RST_PORT GPIOB
#define IIC_1_SDA_PORT GPIOC
#define SPI1_SDA_PORT GPIOA
IIC和SPI都有SDA 和SCK引脚并且很多单片机不止一个SPI和IIC(模拟IIC硬件IIC)
如果在在.h文件宏定义不加附属名字就很容易重复定义
3.在h文件里面不要随便包含.h文件,如果要调用就在.c文件里面加,我以前被这个害惨了
4.函数名重复定义,这个在相同的函数名后面加_1 _2既可以阻止命名想通了
5慎用extern关键字,别随意将其他文件的变量引进

这只是我所知道的,可能并不完全,希望能帮到你

作者: piliming    时间: 2020-4-30 15:33
每个C文件的函数,加extern
作者: 嘿嘿嘿a    时间: 2020-4-30 16:10
piliming 发表于 2020-4-30 15:33
每个C文件的函数,加extern

我试了不行的
作者: mcucludet    时间: 2020-4-30 16:41
嘿嘿嘿a 发表于 2020-4-30 16:10
我试了不行的

别全一股脑加上,必须有一个确切。其他文件需要。不然大家都找其他文件最后都找不到。楼主可以看下该词解释。
作者: 嘿嘿嘿a    时间: 2020-4-30 17:08
黄youhui 发表于 2020-4-30 15:36
重复定义可以是函数名重复定义,变量重复定义。避重定义的方法:

1不要在.h文件里面定义全局变量,在,c文 ...

好的,万分感谢
作者: hantu    时间: 2020-4-30 18:33
要学会使用 #ifdef 这些条件预编译
作者: 嘿嘿嘿a    时间: 2020-5-3 19:13
mcucludet 发表于 2020-4-30 16:41
别全一股脑加上,必须有一个确切。其他文件需要。不然大家都找其他文件最后都找不到。楼主可以看下该词解 ...

已经解决了,只要别在C文件直接调用别的C文件,只调用那些C文件对应的头文件就行,就不会出现重复定义问题了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1