C語言中的範圍,連結屬性和儲存類型

來源:互聯網
上載者:User

標籤:str   static   變數聲明   儲存   靜態   處理   標識符   部分   建立   

範圍

當變數在程式的某個部分被聲明的時候,他只有在程式的一定漁區才能被訪問,編譯器可以確認4種不同類型的範圍:檔案範圍,函數範圍,代碼塊範圍和原型範圍

1.代碼塊範圍:位於一對花括弧之間的所有語句稱為一個代碼塊.任何在代碼塊的開始位置聲明的標識符都具有代碼塊範圍,表示他可以被這個代碼塊中的所有語句訪問.(例子中:f,g函數,i)

2.檔案範圍:任何在所有代碼塊之外聲明的標識符都具有檔案範圍,他表示這些標識符從他們的聲明之處直到他所在的源檔案結尾處都是可以訪問的.(例子中:a,b)

3.原型範圍:原型範圍只適用於在函數原型中聲明的參數名.(例子中:c,h)

4.函數範圍:表示一個函數中的範圍.

例子:

int a;

int b(int c);

int d (int e){

  int f:

  int g(int h);

  ...

  {

    int f,g,i;

  }

  {

    int i;

  }

}

 

連結屬性
   當組成一個程式的各個源檔案分別被編譯之後,所有的目標檔案以及那些從一個或者多個函數庫中引用的函數連結在一起,形成可執行程式,如果相同的標識符出現在幾個不同的源檔案中.標識符的連結屬性決定如何處理這些標識符.

   連結屬性一共有三種:external(外部),internal(內部)和none(無).

1.none:沒有連結屬性的標識符(none)總是被當做單獨的個體.

2.internal:標識符在同一個源檔案內的所有聲明都指同一個實體,但位於不同源檔案的多個聲明則分屬於不同實體

3.external:標識符不論聲明多少次,位於幾個源檔案都表示同一個實體.

例子:

typedef char *a;

int b;

int c(int d){

  int e;

  int f(int g);

}

預設情況下:b,c,f的連結屬性為external,其餘標識符為none.

關鍵字extern和static用於在聲明中修改標識符的連結屬性.如果在預設是external屬性前加上static,可以使他的屬性變為internal.

比如上述 static int b;和static int c(int d)就變成這個源檔案私人,不能被其他檔案訪問.

static只對預設屬性為external的聲明才有效果,對預設是none的效果完全不一樣.

extern可以吧none屬性的標識符變為external屬性.

比如上述extern int e修改之後可以使用其他源檔案的e標識符

儲存類型

 在程式中,變數儲存類型決定他何時建立,何時銷毀,以及他的值保持多久.有三個地方可以用於儲存變數:普通記憶體,運行時堆棧,硬體寄存器.

普通記憶體:凡是在任何代碼塊之外聲明的變數總是儲存於靜態記憶體中.這類變數稱為靜態變數,這類變數在程式啟動時建立,終止時銷毀.

運行時堆棧:在代碼塊內部聲明的變數的預設儲存類型是自動的,稱為自動變數.如果在代碼塊內部聲明的變數前面加上static,這個變數的儲存類型就改變為靜態,程式運行中一直存在

硬體寄存器:使用關鍵字register聲明的變數表示寄存器變數,儲存在硬體的寄存器中.他只能對自動變數聲明

 

C語言中的範圍,連結屬性和儲存類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.