阿摩線上測驗 登入

申論題資訊

試卷:99年 - 99 關務特種考試_四等_資訊處理:程式語言概要#27556
科目:程式語言
年份:99年
排序:1

題組內容

一、

申論題內容

⑵試說明下列變數 x 的定義有何不同: 
1 static int x;2 register int x;3 extern int x。(9 分)

詳解 (共 2 筆)

詳解 提供者:114年高考上榜

這三個變數的定義如下:

 
static int x:這個變數是一個靜態變數,它在程式執行期間只會被初始化一次,且只能在所在的函數或檔案中被訪問。如果這個變數在函數中定義,那麼它的生命週期是從函數第一次被調用時開始,直到程序結束為止。如果這個變數在檔案中定義,那麼它的生命週期是從程式開始執行時開始,直到程式結束為止。
 
register int x:這個變數是一個寄存器變數,它會被優化器放到 CPU 的寄存器中,以加速對它的訪問。因為寄存器的數量有限,所以不能保證所有的寄存器變數都會被放到寄存器中。如果某個變數的值被頻繁地訪問,那麼把它聲明為寄存器變數可以提高程式的執行效率。不過,對於大多數現代 CPU 來說,編譯器已經可以很好地優化程式碼,所以通常不需要使用寄存器變數來進行手動優化。
 
extern int x:這個變數是一個外部變數,它在某個檔案中聲明,在另一個檔案中定義。這樣可以讓多個檔案共享這個變數。在聲明這個變數時,不會為它分配任何記憶體空間,而在定義它時才會為它分配記憶體空間。在多個檔案中聲明同名的外部變數時,這些變數實際上是同一個變數的不同名字。為了避免這種問題,可以在聲明這些變數時使用 extern 關鍵字,這樣可以讓編譯器知道這些變數實際上是在不同的檔案中定義的。
詳解 提供者:hchungw
static int x;:宣告一個靜態變數,作用域在當前檔案或函數內,儲存週期為整個程式執行期間。
register int x;:建議編譯器將變數儲存在寄存器中,以便更快訪問,作用域在當前函數或程式碼區塊內,儲存週期與自動變數相同。
extern int x;:宣告一個在其他檔案中定義的全域變數,作用域在整個程式中,儲存週期為整個程式執行期間。
每種宣告方式都有其特定的使用場景和特性,根據需要選擇合適的宣告方式可以提高程式的性能和可維護性。