asdasd 发表于 2009-11-26 09:42:49

请问大家是在keil怎么定义全局变量的,当几个.C文件想同时调用定义在.H文件里面的全局

先谢谢了!!

lollipop 发表于 2009-11-26 09:47:10

定义在.H文件里面的全局变量的时候...

变量定义不要放在头文件里。

在C文件里定义,在头文件里extern

richey07 发表于 2009-11-26 09:50:40

module1.h
extern int iCounts;

module1.c
int iCounts;

moudule2.c
moudule3.c
#include "moudule1.h"

asdasd 发表于 2009-11-26 10:48:41

先谢谢楼上的两位朋友!
以2楼朋友的例子,先在.H文件里面声明extern,然后在一个需要调用此变量的.C定义此变量,但请问在module1.C已经定义,在其他module2.c和module3.c用到此变量时还需定义一次吗?还是只需#includes "module1.h"即可?

z7001 发表于 2009-11-26 10:49:51

mark

lollipop 发表于 2009-11-26 10:56:50

以2楼朋友的例子,先在.H文件里面声明extern,然后在一个需要调用此变量的.C定义此变量,但请问在module1.C已经定义,在其他module2.c和module3.c用到此变量时还需定义一次吗?还是只需#includes "module1.h"即可?

再定义一次不是重复定义了嘛,包含头文件就行了。

liaowei 发表于 2009-11-26 10:57:57

首先,定义只许一次,否则会出错,
extern unsigned char a;
这叫外部引用,扩宽这个变量的作用域。
我一般是在具体的函数内部才使用extern引用进来,否则,在开头处引用的话都不知道该文件哪个函数使用了该变量,很不方便

asdasd 发表于 2009-11-26 11:14:01

我是这样做的:
Public_define.h
extern bit timer0flag

#include "public_define.h"
mcu_function.c
{
}
#include "public_define.h"
rf_function.c
{
}
#include "public_define.h"
main.c
{
bit timer0_flag;
timer0_flag=0;
}
但在mcu_function.c不能使用此变量,请指点!

谢谢各位的热心帮助,事情好像解决了
解决如下:
bit timer0_flag;
main.c
{
timer0_flag=0;
}
在主函数中对timer0_flag的定义放在主函数外即可!

eduhf_123 发表于 2009-11-26 11:19:27

.H文件中只放置声明——函数的声明使用“函数头部”+“;”的形式,变量的声明用“extern”
.C文件中才放置定义。

kebaojun305 发表于 2009-11-26 11:44:14

可以参考UCOS源码的定义方法。

richey07 发表于 2009-11-26 23:25:22

在主函数中对timer0_flag的定义放在主函数外即可!
---------------------------------------------------
这个是全局变量当然要在函数外边定义了,定义在函数里面是局部变量。

ksws0482846 发表于 2011-9-18 10:22:30

多谢各位,小弟受益了。。。

jinpoiu 发表于 2011-9-18 13:02:38

mark

szxy06dq 发表于 2011-11-22 17:34:15

呵呵 不错,刚好用到。

HYZ1989 发表于 2011-11-22 18:46:24

mark

xfdr 发表于 2013-1-3 11:04:22

又学到一点!
页: [1]
查看完整版本: 请问大家是在keil怎么定义全局变量的,当几个.C文件想同时调用定义在.H文件里面的全局