这样写就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);
}
ram.h
#define uchar unsigned char
#define uint unsigned int
extern uchar aaa; //修改为uchar aaa; extern表示变量声明,未定义。
2楼的方法我试过好像不行,还是不能赋值,取值。
现在用这种方法倒是可以,但是我不知道是否合理,
再添加一个ram.c文件
内容如下:
#include "ram.h"
uchar aaa;
这样倒是所有的×.c都能赋值读取,但是对于结构体却没有作用,不知道为何?
补,谢谢楼上两位答疑。
完整的编译通过的。
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
在main.h里面声明了extern,那在main.c里面得定义一个uchar。
一处定义原则:
必须在一个地方,且仅一个地方有定义:
unsigned int XXX;
可在多个你用到的地方前声明
extern unsigned int XXX;
extern告诉编译器,这个东西是别的文件的,从整个工程里找
另外:
能不用全局变量的时候就别用,如果非用不可,那一定要写好注释,在什么时候,什么地方什么操作这个变量
否则,这样的代码没有办法维护,而且,很多时候怎么死的都不知道
你根本就没有定义全局变量!
extern uchar aaa; 只是告诉其它的文件aaa是一个全局变量,但是你没有定义啊
一般式这样写的
qww.h文件
#ifndef QWW_H
#define QWW_H
extern unchar aaa;
#endif
qww.c文件
#include qww.h
uchar aaa = 0;
这样就可以了
最好的头文件添加一个宏定义,确保不是重复引用头文件