keil 51 全局变量的问题 急

ra62ry222   2009-4-27 10:11 楼主
提示: 作者被禁止或删除 内容自动屏蔽

回复评论 (8)

这样写就OK了。
ram.h
#ifndef __RAM_H__
#define __RAM_H__
#define uchar unsigned char
#define uint unsigned int
uchar aaa;
#endif

a.c
#include "ram.h"
void a()
{
aaa=1;
}

b.c
#include "ram.h"
void b()
{
diaplay(aaa);
}
点赞  2009-4-27 10:34
ram.h
#define uchar unsigned char
#define uint unsigned int
extern uchar aaa; //修改为uchar aaa; extern表示变量声明,未定义。





点赞  2009-4-27 11:55
2楼的方法我试过好像不行,还是不能赋值,取值。

现在用这种方法倒是可以,但是我不知道是否合理,

再添加一个ram.c文件
内容如下:
#include "ram.h"
uchar aaa;


这样倒是所有的×.c都能赋值读取,但是对于结构体却没有作用,不知道为何?

补,谢谢楼上两位答疑。




点赞  2009-4-27 15:55
去掉extern ,编译不通过。
点赞  2009-4-27 15:57
完整的编译通过的。
main.c
#include "ram.h"
uchar aaa;
main()
{ a();
  b();
}

a.c
#include "ram.h"
void a()
{
aaa=1;
}

b.c
#include
#include
#include "ram.h"
void b()
{
printf("%d",aaa);
}

ram.h
#ifndef __RAM_H__
#define __RAM_H__
#define uchar unsigned char
#define uint unsigned int
extern uchar aaa;
void a();
void b();
#endif
点赞  2009-4-27 18:11
在main.h里面声明了extern,那在main.c里面得定义一个uchar。
点赞  2009-4-27 18:32
一处定义原则:

必须在一个地方,且仅一个地方有定义:
unsigned int XXX;

可在多个你用到的地方前声明

extern unsigned int XXX;
extern告诉编译器,这个东西是别的文件的,从整个工程里找


另外:
能不用全局变量的时候就别用,如果非用不可,那一定要写好注释,在什么时候,什么地方什么操作这个变量

否则,这样的代码没有办法维护,而且,很多时候怎么死的都不知道
点赞  2009-4-27 19:34
你根本就没有定义全局变量!
extern uchar aaa; 只是告诉其它的文件aaa是一个全局变量,但是你没有定义啊

一般式这样写的

qww.h文件

#ifndef QWW_H
#define QWW_H

extern unchar aaa;

#endif


qww.c文件
#include qww.h
uchar aaa = 0;

这样就可以了

最好的头文件添加一个宏定义,确保不是重复引用头文件
点赞  2009-5-5 17:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复