C語言存儲類關鍵字

1、static

這個關鍵字有三種用法:

(1)第一種是用來修飾局部變量,使之成爲靜態局部變量;靜態局部變量存儲在數據段/bss段中,作用域是代碼塊作用域,生命週期是程序生命週期,鏈接屬性是無連接。靜態局部變量只初始化一次,以後使用時的值是上次使用後的值(類似全局變量)

(2)第二種是用來修飾全局變量,使之成爲靜態全局變量;靜態全局變量存儲在數據段/bss段中,作用域是文件作用域,生命週期是程序生命週期,鏈接屬性是外鏈接。static修飾的全局變量只在定義它的源文件內有效,在同一源程序的其它源文件內不可使用,利用此特性可以避免多文件變量重名的問題。

(3)第三種是用來修飾函數,使之成爲靜態函數;靜態全局變量存儲在數據段/bss段中,作用域是文件作用域,生命週期是程序生命週期,鏈接屬性是內鏈接。static修飾的函數只在定義它的源文件內有效,在同一源程序的其它源文件內不可使用,利用此特性可以避免多文件函數重名的問題。

(4)在多個源文件的程序中,只在一個源文件使用的函數或者全局變量應該加static關鍵字加以說明。

2、auto

這個關鍵字只有一種用法:

只能用來修飾局部變量,使之成爲自動局部變量,自動局部變量存儲在棧上,其實我們平常定義的局部變量就是自動局部變量,只是我們把auto關鍵字省略了;可見,定義普通的局部變量默認就是auto關鍵字修飾的局部變量。

3、extern

(1)這個關鍵字常用來聲明全局變量;目地是在多文件項目中在a.c中定義全局變量而在b.c中使用這個全局變量;

(2)因爲C語言程序編譯時是以單個.c文件爲單位編譯的,如果不聲明直接使用,編譯器就會報錯誤,解決方案就是使用extern關鍵字聲明(注意聲明時不能賦值,否則會出現錯誤:重複定義)

(3)應該在b.c中使用這個全局變量之前聲明這個全局變量,告訴編譯器我在別的文件中定義了這個全局變量,並且原型和聲明一樣,這樣鏈接時鏈接器就會去別的.o文件中找到這個同名的全局變量。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章