C語言的外部變量的定義和引用對初學者來說,是個難點.
對外部變量的說明和定義不是一回事.對外部變量的說明,只是聲明該變量是在外部定義過的一個全局變量..在這里引用.而對外部變量的定義,則是要分配存儲單元.一個全局變量只能定義一次,卻可以多次引用.
用extern聲明外部變量,目的是可以在其它的文件中調用.具體使用見下面的例子:
file1.c file2.c
inti,j;//定義全局變量 extern int i,j;//外部變量說明
charc; extern charc;
void func() voidfunc1()
{ {
} }
在file2.c中對外部變量i,j,c進行了說明,就可以直接調用file1.c中定義的全局變量了
靜態(tài)變量static的使用
有時在中斷程序中定義了變量,不希望每次進入中斷程序,變量就被賦初值.這時就要使用static變量.靜態(tài)局部變量在編譯時賦初值,既只賦初值一次.見下例:
void serial_interrupt()interrupt 4 using 3
{ static uchar i="0";
i++;
}
上例中,編譯時,i被賦初值0,以后每進入一次中斷,i+1,而不是每次進入中斷,i都被請零,再加1
如果在a.c中要調用在b.c中定義的函數func(),需要在a.c中聲明該函數,表示該函數在別的源文件中定義。函數是可以互相調用的,因此函數都具有外部存儲種類的屬性。原則上調用一個在在本程序模塊文件以外的其他模塊文件所定義的函數,必須用關鍵字extern說明被調用函數是一個外部函數。實際使用中可以省掉extern。即下面兩個函數聲明沒有明顯的區(qū)別:
extern int f();和int f();
|