c 函式過載的原理

2021-08-03 07:59:11 字數 709 閱讀 9701

一、什麼是函式過載:

函式過載是指在同一作用域內,可以有一組或者多組具有相同函式名,不同引數的函式,這組函式被稱為過載函式。

過載函式通常用來命名一組功能相似的函式,這樣做減少了函式名的數量及複雜度,避免了名字空間的汙染,對於程式的可讀性有很大的好處。

具體的函式例子:

#include using namespace std;

int add(int a, int b)

double add(double a, double b)

int main()

按照我們的猜想,在反彙編中輸出的函式名應該是:_z3addid。

驗證:

驗證結果與我們預期一樣。

由上我們就可以來回答乙個問題:

在c++ 程式中呼叫被 c 編譯器編譯後的函式,為什麼要加 extern 「c」宣告?

答:c++語言支援函式過載,c語言不支援函式過載。函式被c++編譯後在庫中的名字與c語言的不同。假設某個函式的原型為:void foo(int x, int y);

該函式被c編譯器編譯後在庫中為_foo,而c++編譯器則會產生像_foo_int_int之類的名字。

c++提供了c連線交換指定符號extern 「c」來解決名字匹配問題。

C 函式過載的實現原理

對於c 來說,多個函式可以同名,但是這些函式的引數型別必須不一樣,也就是說c 中相同的函式名函式引數不同代表了不同的函式,當你去呼叫這些函式時,編譯器可以根據你的傳入引數的型別去判斷你呼叫的是哪個函式。但是c 編譯器是怎麼實現的呢?先看看c對於函式的處理 執行命令 gcc s main c.c o ...

c 函式過載的實現原理

1.c 問什麼引入函式過載 在c語言中,如果我們寫兩個函式名相同的函式,編譯器會告訴我們,函式重定義的錯誤。我們還會遇到下面這個問題 如果我們寫乙個計算int型別的加法,另乙個計算double型別的加法,我們必須起兩個不同的函式名。而在c 中我們可以解決這兩個問題。我們可以用相同的函式名,只有引數列...

C 中函式過載原理

1.c 中,關於一組函式過載,必須有以下幾點必要條件 1 函式名相同 2 形參列表不同 形參個數 形參型別 3 函式宣告在同一作用域中 2.關於過載原理簡述 c語言中函式符號與對應的函式名一致,而c 中為了支援函式過載,編譯器會對此做一些處理,因此我們不必擔心會有命名衝突的擔憂。c 實現函式過載 的...