天天看點

C語言中關鍵字auto、static、register的作用

  • auto:這個關鍵字用于聲明變量的生存期為自動,即将不在任何類、結構、枚舉、聯合和函數中定義的變量視為全局變量,而在函數中定義的變量視為局部變量。這個關鍵字不怎麼多寫,因為所有的變量預設就是auto的。
  • register:這個關鍵字指令編譯器盡可能的将變量存在CPU内部寄存器中而不是通過記憶體尋址通路以提高效率。如果一個變量被register來修飾,就意味着該變量作為一個寄存器變量,讓該變量的通路速度達到最快。例如,一個程式邏輯中有一個很大的循環,循環中有幾個變量要頻繁進行操作,這些變量就可以聲明為register類型。
  • static:常見的兩種用途:     1>統計函數被調用的次數;     2>減少局部數組建立和指派的開銷.變量的建立和指派是需要一定的處理器開銷的,特别是數組等含有較多元素的存儲類型。在一些含有較多的變量并且被經常調用的函數中,可以将一些數組聲明為static類型,以減少建立或者初始化這些變量的開銷.   詳細說明:     1>、變量會被放在程式的全局存儲區中,這樣可以在下一次調用的時候還可以保持原來的指派。這一點是它與堆棧變量和堆變量的差別。(在用static修飾局部變量後,該變量隻在初次運作時進行初始化工作,且隻進行一次。)     2>、變量用static告知編譯器,自己僅僅在變量的作用範圍内可見。這一點是它與全局變量的差別。     3>當static用來修飾全局變量時,它就改變了全局變量的作用域,使其不能被别的程式extern,限制在了目前檔案裡,但是沒有改變其存放位置,還是在全局靜态儲存區。  使用注意:     1>若全局變量僅在單個C檔案中通路,則可以将這個變量修改為靜态全局變量,以降低子產品間的耦合度;     2>若全局變量僅由單個函數通路,則可以将這個變量改為該函數的靜态局部變量,以降低子產品間的耦合度;     3>設計和使用通路動态全局變量、靜态全局變量、靜态局部變量的函數時,需要考慮重入問題(隻要輸入資料相同就應産生相同的輸出)。

繼續閱讀