C 筆記 C語言為什麼不能函式過載

2021-08-20 20:29:55 字數 1230 閱讀 7704

函式過載 一、

1、原因:c語言不能函式過載與函式編譯後函式名有關。

2、c語言編譯後的**名稱為」_函式名」

//c語言

int add(int a,int b); //這裡是有意只給宣告不給定義,

int add(int a,char b); //出錯後會在顯示框顯示編譯後的函式名

int add(char a,int b);

int main()

下圖為編譯後的結果

編譯後函式名變化只是在原來的函式名前加了乙個下劃線,所以當同名的函式引數不同時,編譯器無法解析到他們的不同,因為它們編譯後的名稱都相同,所以c語言不能函式過載。

3、c++為什麼可以函式過載

#include 

int add(int a,int b);

int add(int a,char b);

int add(char a,int b);

int main()

編譯結果如圖所示

由上圖分析,因為c++同名引數不同的函式編譯完函式名稱不同,所以可以函式過載。

問題:只有返回值型別不同時,為什麼不能函式過載?

只有返回值型別不同時,編譯後的名稱也不相同,為什麼不能過載

1、只有返回值不同的函式,在呼叫時編譯器不知道該呼叫那個。

2、每個編譯器編譯後的函式名稱轉換方式不同

4、補充問題

先回答乙個問題?編譯的時候為什麼只有宣告沒有定義不會報錯?

因為編譯時只會在當前工程去找定義,如果沒有找到定義找到函式宣告就不找了,因為編譯器認為這個函式的定義有可能在其他檔案裡面,先把編譯時沒有函式定義這個問題放過去,等到鏈結的時候再在其它檔案查詢,找不到在報錯。

所以我們找出驗證的方法是,寫函式只給函式宣告,不給函式定義,然後呼叫,鏈結是會出現錯誤

C語言學習篇 32 為什麼C語言不能函式過載

在日常的開發中,我們有時會遇到根據不同情景,想通過傳入不同型別的引數,而呼叫統一的函式介面,即函式過載。在c 中原生支援了函式過載,而在c語言中並不支援,只能通過一些技巧來變相解決,如定義flag形參,根據flag值不同,進行不同的處理。例如 void test void a,void b,int ...

39 C 為什麼不能過載

不能過載operator 和 operator 的原因是,無法在這兩種情況下實現內建操作符的完整語義。說得更具體一些,內建版本版本特殊之處在於 內建版本的 和 首先計算左邊的表示式,如果這完全能夠決定結果,就無需計算右邊的表示式了 而且能夠保證不需要。我們都已經習慣這種方便的特性了。我們說操作符過載...

C 為什麼C 支援函式過載而C語言不支援

double add double left,double right long add long left,long right 例如上面的 add函式的函式名字重複,但引數不同 包括引數的個數 型別不同 的函式。這種情況在c語言的編譯中是不通過的,但c 卻可以。接下來我們來講解原因 實際我們的專...