找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2333|回复: 7
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
2黑币

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

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

最佳答案

查看完整内容

重复定义可以是函数名重复定义,变量重复定义。避重定义的方法: 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) ...
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:592807 发表于 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关键字,别随意将其他文件的变量引进

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

使用道具 举报

板凳
ID:741674 发表于 2020-4-30 15:33 | 只看该作者
每个C文件的函数,加extern
回复

使用道具 举报

地板
ID:711376 发表于 2020-4-30 16:10 | 只看该作者
piliming 发表于 2020-4-30 15:33
每个C文件的函数,加extern

我试了不行的
回复

使用道具 举报

5#
ID:700854 发表于 2020-4-30 16:41 | 只看该作者

别全一股脑加上,必须有一个确切。其他文件需要。不然大家都找其他文件最后都找不到。楼主可以看下该词解释。
回复

使用道具 举报

6#
ID:711376 发表于 2020-4-30 17:08 | 只看该作者
黄youhui 发表于 2020-4-30 15:36
重复定义可以是函数名重复定义,变量重复定义。避重定义的方法:

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

好的,万分感谢
回复

使用道具 举报

7#
ID:462827 发表于 2020-4-30 18:33 | 只看该作者
要学会使用 #ifdef 这些条件预编译
回复

使用道具 举报

8#
ID:711376 发表于 2020-5-3 19:13 | 只看该作者
mcucludet 发表于 2020-4-30 16:41
别全一股脑加上,必须有一个确切。其他文件需要。不然大家都找其他文件最后都找不到。楼主可以看下该词解 ...

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表