在KEIL C中,有多個源文件使用到全局變量時,可以在一個源文件中定義全局變量,在另外的源文件中用extern 聲明該變量,說明該變量定義在別的文件中,將其作用域擴展到此文件。
例如:有以下兩個源文件test1.c,test2.c
//test1.c
char aaa; //定義aaa
func1()
{
char bbb;
aaa = bbb;
}
//……
//test2.c
extern char aaa; //把aaa的作用域擴展到此
func2()
{
char ccc;
aaa =ccc;
}
//……
如果還有其他文件要用到aaa,用法同test2.c,使用extern char aaa;語句將aaa的作用域擴展到此,然后就可以使用它。這里要特別注意的是:在使用extern時,不要忘了變量的類型,也就是上面例子變量aaa的修飾符char,不然結(jié)果就不是你想要的結(jié)果了,aaa的值將不可預(yù)料。
本來我想嘗試把全局變量定義到頭文件里面的,可是屢試不爽,編譯器老是報重定義的錯,還舉上面的例子,具體如下:
復(fù)制代碼
//test1.h
#ifndef __TEST1_H__
#define __TEST1_H__
char aaa; //在test1.c的頭文件中定義aaa;
func1();
#endif
//test1.c
#include “test1.h”
func1() //在func1中給aaa賦值
{
char bbb;
aaa = bbb;
}
//////////////////////////////////////////////////////////////
//test2.h
#ifndef __TEST2_H__
#define __TEST2_H__
extern char aaa; //在test2.c的頭文件中聲明aaa為外部變量
func2();
#endif
//test2.c
#include “test1.h” //包括test1.h
#include “test2.h”
func2()
{
char ccc;
aaa =ccc;
}
可是編譯器總是報aaa重定義的錯,經(jīng)過改正,編譯通過,修改如下:
//test1.h
#ifndef __TEST1_H__
#define __TEST1_H__
extern char aaa; //在test1.c的頭文件中聲明外部變量aaa;
func1();
#endif
//test1.c
#include “test1.h”
char aaa; //在test1.c中定義aaa;
func1() //在func1中給aaa賦值
{
char bbb;
aaa = bbb;
}
//////////////////////////////////////////////////////////////
//test2.h
#ifndef __TEST2_H__
#define __TEST2_H__
func2();
#endif
//test2.c
#include “test1.h” //包括test1.h
#include “test2.h”
func2()
{
char ccc;
aaa =ccc;
}
也就是說,只要在使用的源文件中定義全局變量,在對應(yīng)頭文件中聲明該全局變量為外部變量,即該變量允許外部使用,在其他要使用該變量的源文件中包括該頭文件即可。