Keil C 中全局變量 extern 的使用


在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,不然結果就不是你想要的結果了,aaa的值將不可預料。

本來我想嘗試把全局變量定義到頭文件里面的,可是屢試不爽,編譯器老是報重定義的錯,還舉上面的例子,具體如下:

//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重定義的錯,經過改正,編譯通過,修改如下:

//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;

}

也就是說,只要在使用的源文件中定義全局變量,在對應頭文件中聲明該全局變量為外部變量,即該變量允許外部使用,在其他要使用該變量的源文件中包括該頭文件即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM