1. 程式人生 > >C語言-全域性變數與區域性變數、全域性函式與內部函式

C語言-全域性變數與區域性變數、全域性函式與內部函式


變數的宣告與定義:

  • Int a;是定義型宣告,既是宣告又是定義,需要分配儲存空間
  • Extern a;是引用型宣告,只是宣告,不需要分配儲存空間

1、全域性變數與區域性變數

全域性變數:

  • 編譯時分配記憶體,放在靜態儲存區裡,習慣:首字母大寫;。
  • 可以使用extern擴充套件全域性變數的作用域,如extern a;,可以在外部檔案中擴充套件,也可以在同一檔案中擴充套件(如函式B在呼叫的時候使用了a,但a還沒定義)

(當編譯的時候,遇到extern時,會先從本檔案中查詢全域性變數的定義,如果找到,就在本檔案中擴充套件作用域;如果沒有找到,就在連結的時候,從外部檔案中查詢全域性變數的定義,如果找到,就將作用域擴充套件到本檔案,否則報錯)

  • 靜態的全域性變數:全域性變數使用static修飾,僅限於本檔案中使用

區域性變數:

  • 在需要的時候分配記憶體
  • 儲存類別:auto(動態儲存區)、static(靜態儲存區)、(register(在CPU的暫存器裡,更快))
  • 靜態區域性變數:static int a,雖然呼叫結束後仍然存在,但其他函式不能引用,因為它是區域性變數。

2、全域性函式與內部函式

  • 函式預設是全域性的,可以被其他檔案中的函式呼叫,當外部需要引用該函式的時候,需要使用函式的原型宣告一下,如extern int f(int a);,

    函式原型通知系統,該函式在本檔案中稍後定義,或在其他檔案中定義。

  • 可以被外部檔案引用,也可在在本檔案中內其他函式引用(如果使用者自定義的函式在主調函式的後面,應該再主調函式中對被調函式做宣告。也可進行外部的宣告(在檔案的開頭宣告))
  • 內部函式(靜態函式):只能在本檔案中呼叫,Static void f(int a)

空函式:在程式設計的第一階段,主要完成基本的功能,對一些錦上添花的模組,可以先定義一個空函式,以後再完善它。

在定義函式時指定的函式型別一般和return語句的表示式型別一致,如果不一致,以函式型別為準。