標(biāo)題: C語(yǔ)言外部變量和靜態(tài)變量的使用 [打印本頁(yè)]

作者: 51黑黑黑    時(shí)間: 2016-2-13 01:19
標(biāo)題: C語(yǔ)言外部變量和靜態(tài)變量的使用
C語(yǔ)言的外部變量的定義和引用對(duì)初學(xué)者來說,是個(gè)難點(diǎn).

對(duì)外部變量的說明和定義不是一回事.對(duì)外部變量的說明,只是聲明該變量是在外部定義過的一個(gè)全局變量..在這里引用.而對(duì)外部變量的定義,則是要分配存儲(chǔ)單元.一個(gè)全局變量只能定義一次,卻可以多次引用.

用extern聲明外部變量,目的是可以在其它的文件中調(diào)用.具體使用見下面的例子:

            file1.c                                      file2.c

       inti,j;//定義全局變量                       extern  int i,j;//外部變量說明

       charc;                                       extern charc;

      void func()                                    voidfunc1()

    {                                               {

       }                                              }

在file2.c中對(duì)外部變量i,j,c進(jìn)行了說明,就可以直接調(diào)用file1.c中定義的全局變量了

靜態(tài)變量static的使用

有時(shí)在中斷程序中定義了變量,不希望每次進(jìn)入中斷程序,變量就被賦初值.這時(shí)就要使用static變量.靜態(tài)局部變量在編譯時(shí)賦初值,既只賦初值一次.見下例:

  void serial_interrupt()interrupt 4 using 3

{ static uchar i="0";

   i++;

}

上例中,編譯時(shí),i被賦初值0,以后每進(jìn)入一次中斷,i+1,而不是每次進(jìn)入中斷,i都被請(qǐng)零,再加1

如果在a.c中要調(diào)用在b.c中定義的函數(shù)func(),需要在a.c中聲明該函數(shù),表示該函數(shù)在別的源文件中定義。函數(shù)是可以互相調(diào)用的,因此函數(shù)都具有外部存儲(chǔ)種類的屬性。原則上調(diào)用一個(gè)在在本程序模塊文件以外的其他模塊文件所定義的函數(shù),必須用關(guān)鍵字extern說明被調(diào)用函數(shù)是一個(gè)外部函數(shù)。實(shí)際使用中可以省掉extern。即下面兩個(gè)函數(shù)聲明沒有明顯的區(qū)別:

extern int f();和int f();                                                                       





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1