連結器與載入器與執行檔格式
C++編譯器在函式名稱上附加參數型別等資訊以產生符號名稱的「名稱修飾(name mangling)」,其主要目的為下列何者?
- A讓函式名稱無法閱讀,以免程式被竊取
- B縮短函式名稱,使執行檔變小
- C讓連結器能區分名稱相同但參數型別不同的函式(多載,overload)與命名空間
查看答案與解析
正確答案:C. 讓連結器能區分名稱相同但參數型別不同的函式(多載,overload)與命名空間
連結器僅以名稱字串來比對符號。在C++中可以建立如「print(int)」與「print(double)」這樣同名的函式,若維持原樣便無法區分。因此編譯器會像「_Z5printi」這樣,將參數型別等嵌入名稱中。C語言的函式不會被修飾,所以從C++呼叫C函式時,要加上「extern "C"」讓它不做修飾。
- A. 不是為了保護而設計的。
- B. 名稱反而會變長。
- C. 正確。因為連結器只以名稱來比對。