變量存儲類型(auto static extern)


auto 動態存儲類型變量(函數內部變量存儲默認為 auto型)

  auto只用於函數內部定義,單片機在執行這個函數時為它分配內存地址,當函數執行完畢返回后,auto變量會被銷毀,再次進入這個函數時,它的初值是不確定的,必須對她重新進行初始化。auto變量是局部變量,只允許在定義它的函數內部使用,在函數外的其他地方都不能使用。由於auto變量在定義它的函數以外的任何地方都是不可見的,所以允許在這個函數以外的其他地方或是其他函數內部定義同名的變量,它們之間是不會發生沖突的,因為他們都有自己的區域性,在實際的代碼中一般都省略這個關鍵詞,函數的形式參數默認也是auto。

auto變量定義格式為:

auto 數據類型 變量名;

 

static靜態存儲類型變量

  static可用於函數內部變量定義,也可用於函數外部變量定義。在函數內部,static的基本用途是允許一個變量在重新進入這個函數是能夠保持原來的值,static靜態變量在程序運行期間自始至終占用被分配的存儲地址。在函數內部用static定義的變量在函數初次運行時進行初始化工作,且操作一次,以后每次調用函數時不再重新賦初值而只引用上次函數調用結束時的值,如果程序代碼沒有對static變量賦初值,編譯器會自動賦值0或空字符。在函數內部使用static定義的變量時局部變量,只能在定義該變量的函數內使用該變量,推出函數后,盡管靜態局部變量還繼續存在,但不能使用它

  static還有第二種含義,為了限制全局變量或函數的作用域,全局變量或函數前加static使得函數變成靜態函數,但此處static的含義不是指定存儲類型而是對函數的作用域局限於本文件,其他文件不可使用,所有又稱內部函數。使用內部函數的好處是不同的人編寫的不同的函數時,不用擔心自己定義的函數,是否會與其它文件中的函數產生同名沖突。使用static定義的靜態全局變量和外部全局變量的差別在於,外部全局變量可以同時給多個文件使用,而靜態全局變量則只能給定義此變量的文件使用。對於全局變量,不論是否使用static限制(即全局變量和靜態全局變量),它們都一直占用內存地址不釋放。

  把局部變量改變為靜態局部變量后改變了他的生存期,把全局變量改變為靜態全局變量后改變了他的作用域,限制了他的適用范圍。

靜態變量定義格式為:

static 數據類型 變量名;

 

extern外部變量

  在所有函數之外定義的變量稱之為全局變量,全局變量可以在定義時賦初值,若不賦初值,則系統自動定義它們的初值為0。有static限制的全局變量稱為內部全局變量,無static限制的全局變量成為外部全局變量。在代碼量大的程序中,一般會把代碼分類放到多個*.c文件中,如果要在一個C文件中使用另外一個C文件中已經定義的全局變量,就必須使用extern關鍵字。

  extern是變量聲明關鍵字,而非定義,是引入其他C文件中已定義的非static全局變量,比如:“extern int a;”這里聲明了一個變量a,並把這個變量的類型和變量名告訴編譯系統是編譯系統不再為它分配內存地址,這個a是在其他文件已經定義並且分配了內存地址的。外部變量聲明語句的位置可以是在引用它的函數的內部,也可以在應用它的函數的外部。如果變量聲明在函數外部,那么同一個C文件內的所有函數都可以使用這個外部變量;反之如果在函數內部,那么只有這一個函數可以使用該變量。

  注意,extern和static本身就是對立的關鍵字,使用extern是為了不同文件都可使用外部某個變量

外部變量聲明格式為

extern 數據類型變量名;

 


免責聲明!

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



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