1. 程式人生 > >C語言關鍵字register、extern、static、一些總結

C語言關鍵字register、extern、static、一些總結

C語言中:

一、register變數

關鍵字regiter請求編譯器儘可能的將變數存在CPU的暫存器中。有以下幾點注意的地方。

  1. register變數必須是能被CPU暫存器所接受的型別,這通常意味著register變數必須是一個單個的值,並且其長度應小於或等於整型的長度。但是,有些機器的暫存器也能存放浮點數。
  2. register變數可能不存放在記憶體中,所以不能用取址符運算子“ & ”。
  3. 只有區域性變數和形參可以作為register變數,全域性變數不行。
  4. 靜態變數不能定義為register。

二、static

1、修飾變數(區域性和全域性變數)

1.1、靜態全域性變數

在全域性資料區分配記憶體;未經初始化的靜態

全域性變數會被程式自動初始化為0(自動變數的值是隨機的,除非它被顯式初始化)作用域僅限於變數被定義的檔案中。

全域性變數和全域性靜態變數的區別

  (1全域性變數是不顯式用static修飾的全域性變數,但全域性變數預設是靜態的,作用域是整個工程,在一個檔案內定義的全局變數,在另一個檔案中, 通過extern 全域性變數名的宣告,就可以使用全域性變數。

  (2全域性靜態變數是顯式用static修飾的全域性變數,作用域是所在的檔案,其他的檔案即使用extern宣告也不能使用。

1.2、靜態區域性變數

2、靜態函式

  在函式的返回型別前加上static關鍵字,函式即被定義為靜態函數。靜態函式與普通函式不同,它只能在宣告它的檔案當中可

見,不能被其它檔案使用。其它檔案中可以定義相同名字的函數,不會發生衝突。