連結器與載入器與執行檔格式

在C語言中寫下「extern int count;」時,下列關於其意義的敘述何者正確?

  1. A宣告變數count定義在其他地方,這裡不配置空間
  2. B新建變數count,並以0初始化
  3. C讓變數count無法從這個檔案之外看見
查看答案與解析

正確答案:A. 宣告變數count定義在其他地方,這裡不配置空間

extern是「此名稱的變數定義在其他檔案等處」的宣告,不會配置記憶體空間。編譯器在不知道count位址的情況下產生參照它的指令,並將該位置記錄在重定位資訊中。連結器會將其與其他檔案中如「int count = 0;」的定義連結起來,以決定位址。基本做法是在標頭檔中寫extern宣告,並將定義放在某一個原始檔中。

  • A. 正確。只是宣告,定義在別處。
  • B. 配置空間的是定義,如「int count;」等。
  • C. 對外隱藏的是static。
練習這個領域 前往領域頁面

連結器與載入器與執行檔格式的其他題目

  1. 關於Linux等系統常用的ELF格式檔案,下列何者正確?
  2. 執行檔的.text區段中存放的是下列何者?
  3. 在C語言中,寫在檔案外側的全域變數「int limit = 100;」,一般會放在哪個區段?
  4. 關於.bss區段的特徵,下列何者正確?
  5. 執行C語言的「char *p = "hello"; p[0] = 'H';」時,在許多環境中會異常終止。下列關於其原因的敘述何者正確?

這個領域的比較