本帖最后由 and001 于 2013-8-4 11:55 编辑
为了使程序更加结构紧凑,具有更好的条理化,程序员往往将自己的程序按模块分成若干个原文件(*。c).然后用H头文件将函数相互关联起来,要调用就方便了!
现在我有个问题好象不是太明白,就是函数本身有时需要全局变量来参与运行如下:
KEY.C文件如:
void Key_SCan(void)
{
if(fkey_count) //fkey_count是用来做标志,为“1”的时候才进入出来扫描
{
// P1=0xF4;
// 确认是自动扫描还是手动选择 ,手动时的自己输出 fhand_operation 1: 自动扫描 0: 手动
uchar Status_P_1_for_P1_0;
fkey_count=0;
Status_P_1_for_P1_0=P1;
if(!(Status_P_1_for_P1_0&0x01)) {fhand_operation=0;}
else{fhand_operation=1;}
old_status=new_status;
new_status=P1;
}
KEY.H文件如:
#ifndef _KEY_H_
#define _KEY_H_
/*
void Key_SCan(void); //在这里申明各函数
....
上面是的fkey_count位变量应该怎么处理比较合适呢?是在头文件H中定义还是怎么样?一般好象是不定义变量的在其他原。C文件中不定义,请问有经验的朋友,你们是怎么处理的?
另外,调用数是用带参还是尽量不用带参数好,如果带参的话,就好象不用在KEY.C文件中定义全局位变量(只要用形参传进来就好了)请大家各抒己见...
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
extern int var 的形式去调用,应该这样做:
static int var;
int get_var(void)
{
return var;
}
在其他文件中需要用到这个变量,则不能extern int var,而要通过接口
get_var() 来访问。
从用户的角度来看,这个模块就是一个黑盒子,我不知道他里面什么变量,是什么,怎么得到的,
我只关心我能用什么,我通过调用API 就能拿到什么数据。(类似C++的类,成员函数等等思想)
这样可移植性就好了,你只需要在新平台上实现这些接口,其他程序都不需要改了。
这就是模块化,而不是说,分开几个文件来写程序就是模块化了。
这模块化,是需要付出代价的。
如果是C文件本身用的就定义在C文件中,并用static修饰
如果只是这个函数用的就定义在函数中,并用static修饰
如果是给别的文件用的则定义在C文件,不加修饰,并在h文件中声明成外部变量,用extern修饰
一周热门 更多>