![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
单片机C语言模块化编程问题:一个模块需要使用到SCLK,另外一个模块也用到SCLK,定义为sbit SCLK = P^0
小白求教各位大侠我应该怎么处理,使用extern吗?应该怎么做?两个模块都定义的话会重复的吧?...
小白求教各位大侠我应该怎么处理,使用extern吗?应该怎么做?两个模块都定义的话会重复的吧?
展开
2个回答
展开全部
使用exturn 申明外部定义是一种方法;也可以只在某一个头文件中定义一次,其他模块直接包含该头文件;或者只在一个模块中定义,然后在主程序的头文件中,包含各个子模块,并将有定义 的头文件位置放在前,其他需用该定义的子模块头文件放在后就行。
追问
麻烦再问一下
具体应该怎么写呢?
我的做法是在AD.c中定义 sbit sclk=P1^7;
AD.h中声明 extern sbit sclk;
然后mai.c中直接使用 sclk=0,但是编译报错,我应该怎么写?
追答
方式1:若在AD.h中定义: sbit sclk=P1^7;
如果只在AD.c中使用这个定义, 则在AD.c的头文件中写: #include
方式2:若在AD.c中定义并使用: sbit sclk=P1^7;
而main.c等模块也要用到这个定义,但又没有包含AD.c的语句: #include
则在main.c的文件中声明: exturn sbit sclk=P1^7; //表示在其他文件中已定义过了.
展开全部
AD.h 文件:
#ifndef AD_H
#define AD_H
#define AD_ext extern
#else
#define AD_ext
//本处用于该H文件对应 主C文件(AD.c) 的使用IO定义,如sbit K0=P1^2;本定义只对 主C文件有效
sbit SCLK=P1^7;
#endif
后面跟着写函数声明,所有 本H对应的 主C文件(AD.c) 的函数名称前面都加上 AD_ext,如:
AD_ext uchar AD_Change();
main.c 文件
#include"XXXXXXX"
sbit SCLK=P3^3; //重复某 C 文件内的名称,不影响
#ifndef AD_H
#define AD_H
#define AD_ext extern
#else
#define AD_ext
//本处用于该H文件对应 主C文件(AD.c) 的使用IO定义,如sbit K0=P1^2;本定义只对 主C文件有效
sbit SCLK=P1^7;
#endif
后面跟着写函数声明,所有 本H对应的 主C文件(AD.c) 的函数名称前面都加上 AD_ext,如:
AD_ext uchar AD_Change();
main.c 文件
#include"XXXXXXX"
sbit SCLK=P3^3; //重复某 C 文件内的名称,不影响
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询