天天看點

C語言關鍵字auto、static、typedef、volatile、enum、constC語言關鍵字auto、static、typedef、volatile、enum、const

C語言關鍵字auto、static、typedef、volatile、enum、const

 關鍵字,又叫保留字,是編譯器能識别的特殊單詞,每種計算機語言都會有其特定的關鍵字,C語言中有32位關鍵字。

關鍵字分類

32個關鍵字每個都有不同的意義,大體上根據其意義可以分為以下幾類(下劃線表示不同分類中有交集):

 1)非常見:auto、register、volatile、goto

 2)存儲相關:const、extern、register、volatile、static、auto、signed、unsigned

 3)資料類型:char、short、int、float、long、double、struct、union、enum、void

 4)邏輯控制:if、else、for、while、do、break、continue、return、default、switch、case、goto

 5)特殊用途:sizeof、typedef

(1).auto 自動變量

  這個關鍵字用于聲明變量的生存期為自動,即将不在任何類、結構、枚舉、聯合和函數中定義的變量視為全局變量,而在函數中定義的變量視為局部變量。這個關鍵字不怎麼多寫,因為所有的變量預設就是auto的。

  

eg:

C語言關鍵字auto、static、typedef、volatile、enum、constC語言關鍵字auto、static、typedef、volatile、enum、const

(2).static

 1).static全局變量

 當一個程序的全局變量被聲明為static之後,它的中文名叫靜态全局變量。靜态全局變量和其他的全局變量的存儲地點并沒有差別,都是在.data段(已初始化)或者.bss段(未初始化)内,但是它隻在定義它的源檔案内有效,其他源檔案無法通路它。是以,普通全局變量穿上static外衣後,它就變成了新娘,已心有所屬,隻能被定義它的源檔案(新郎)中的變量或函數通路。

 2).static局部變量

 3).static函數

 C語言中的“private函數”,它就是接下來要說的static函數,完成面向對象程式設計中private函數的功能。

中興通訊2012校招筆試題的一道問答題:

  1. static全局變量與普通的全局變量有什麼差別 ?

     全局變量(外部變量)的說明之前再冠以static 就構成了靜态的全局變量。

     全局變量本身就是靜态存儲方式, 靜态全局變量當然也是靜态存儲方式。 這兩者在存儲方式上并無不同。

     這兩者的差別在于非靜态全局變量的作用域是整個源程式, 當一個源程式由多個源檔案組成時,非靜态的全局變量在各個源檔案中都是有效的。 而靜态全局變量則限制了其作用域, 即隻在定義該變量的源檔案内有效, 在同一源程式的其它源檔案中不能使用它。由于靜态全局變量的作用域局限于一個源檔案内,隻能為該源檔案内的函數公用,是以可以避免在其它源檔案中引起錯誤。

     static全局變量隻初使化一次,防止在其他檔案單元中被引用;

  2. static局部變量和普通局部變量有什麼差別 ?

      把局部變量改變為靜态變量後是改變了它的存儲方式即改變了它的生存期。把全局變量改變為靜态變量後是改變了它的作用域,限制了它的使用範圍。

      static局部變量隻被初始化一次,下一次依據上一次結果值;

  3. static函數與普通函數有什麼差別?

      static函數與普通函數作用域不同,僅在本檔案。隻在目前源檔案中使用的函數應該說明為内部函數(static修飾的函數),内部函數應該在目前源檔案中說明和定義。對于可在目前源檔案以外使用的函數,應該在一個頭檔案中說明,要使用這些函數的源檔案要包含這個頭檔案.

(3).typedef

   C 語言提供了 typedef 關鍵字,可以使用它來為類型取一個新的名字。

  

C語言關鍵字auto、static、typedef、volatile、enum、constC語言關鍵字auto、static、typedef、volatile、enum、const

  

C語言關鍵字auto、static、typedef、volatile、enum、constC語言關鍵字auto、static、typedef、volatile、enum、const

 typedef 與 #define 的差別

C語言關鍵字auto、static、typedef、volatile、enum、constC語言關鍵字auto、static、typedef、volatile、enum、const

(4).volaatile

 volatile關鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:作業系統、硬體或者其它線程等。遇到這個關鍵字聲明的變量,編譯器對通路該變量的代碼就不再進行優化,進而可以提供對特殊位址的穩定通路。

(5).enum

 關鍵字用于聲明枚舉,一種包含一組被稱為枚舉數清單的已命名常數的不同類型。

C語言關鍵字auto、static、typedef、volatile、enum、constC語言關鍵字auto、static、typedef、volatile、enum、const

(6).const

 const意味着隻讀,凡是修改了const不允許修改的東西,編譯器報錯.

 C語言中不是有#define嗎,幹嘛還要用const呢?

 參考資料解答

(7).extern

 extern 意為“外來的”···它的作用在于告訴編譯器:有這個變量,它可能不存在目前的檔案中,但它肯定要存在于工程中的某一個源檔案中或者一個Dll的輸出中。

參考資料:

【Mind語】C語言關鍵字auto與register的深入了解

【cnblogs】C語言中關鍵字auto、static、register、const、volatile、extern的作用

【Mr.TangR】C語言中static關鍵字的作用詳解

【keyeagle】C語言中的static 詳細分析

【Shuai_Xie】C語言中typedef關鍵字的作用

【littletigerat】面試點:解讀關鍵字volatile(C語言面試題分析之一)

【Microsoft】enum(C# 參考)

【Null959_】C語言之const關鍵字總結

【xingjiarong】C語言中const關鍵字的用法