第9課 - 函數重載分析(下)

一、重載與指針

函數重載遇上函數指針,將重載函數名賦值給函數指針時,

  1. 根據重載規則挑選與函數指針參數列表一致的候選者
  2. 嚴格匹配候選者的函數類型與函數指針的函數類型;

如圖1所示的代碼,根據上面兩點可以判斷函數指針明顯指向int func(int x)這個函數。

圖1

函數重載必然發生在同一個作用域中,編譯器需要用參數列表或函數類型進行函數選擇;無法直接通過函數名得到重載函數的入口地址。

二、C++和C相互調用

實際工程中C++和C代碼相互調用是不可避免的,C++編譯器能夠兼容C語言的編譯方式,C++編譯器會優先使用C++編譯方式,extern關鍵字能強制讓C++編譯器進行C方式的編譯。如圖2代碼所示:

圖2

三、__cplusplus的意義

因爲extern ”c“是C++裏的寫法,如果用C語言編譯器去編譯含有extern ”c“的代碼則會報錯。爲了解決這個問題,C++編譯器定了__cplusplus這個標準宏定義,__cplusplus確保了C代碼以統一的C方式被編譯成目標文件。如圖3代碼所示:

圖3

四、重載函數的注意事項

(1)C++編譯器不能以C的方式編譯重載函數;

(2)編譯方式決定函數名被編譯後的目標名;

(3)C++編譯方式將函數名和參數列表編譯成目標名;

(4)C編譯方式只將函數名作爲目標名進行編譯。

五、小結

(1)函數重載是C++對C的一個 重要升級

(2)函數重載通過函數參數列表區分不同的同名函數

(3)extern關鍵字能夠實現C和C++的相互調用;

(4)編譯方式決定符號表中的函數名的最終目標名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章