這三個變數的定義如下:
static int x:這個變數是一個靜態變數,它在程式執行期間只會被初始化一次,且只能在所在的函數或檔案中被訪問。如果這個變數在函數中定義,那麼它的生命週期是從函數第一次被調用時開始,直到程序結束為止。如果這個變數在檔案中定義,那麼它的生命週期是從程式開始執行時開始,直到程式結束為止。
register int x:這個變數是一個寄存器變數,它會被優化器放到 CPU 的寄存器中,以加速對它的訪問。因為寄存器的數量有限,所以不能保證所有的寄存器變數都會被放到寄存器中。如果某個變數的值被頻繁地訪問,那麼把它聲明為寄存器變數可以提高程式的執行效率。不過,對於大多數現代 CPU 來說,編譯器已經可以很好地優化程式碼,所以通常不需要使用寄存器變數來進行手動優化。
extern int x:這個變數是一個外部變數,它在某個檔案中聲明,在另一個檔案中定義。這樣可以讓多個檔案共享這個變數。在聲明這個變數時,不會為它分配任何記憶體空間,而在定義它時才會為它分配記憶體空間。在多個檔案中聲明同名的外部變數時,這些變數實際上是同一個變數的不同名字。為了避免這種問題,可以在聲明這些變數時使用 extern 關鍵字,這樣可以讓編譯器知道這些變數實際上是在不同的檔案中定義的。