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

2021-10-06 03:01:22 字數 1087 閱讀 2252

函式過載:c++允許在同一作用域中宣告幾個功能類似的同名函式,這些同名函式的形參列表(引數個數 或 型別 或 順序)必須不同,常用來處理實現功能類似資料型別不同的問題。

c/c++中程式執行起來,需要經歷一下幾個階段:

在鏈結時,面對add函式,func函式,每個編譯器都有自己的函式名修飾規則。聯結器會使用哪個名字去找呢?

下面通過在linux下gcc和g++的修飾規則,演示這個修飾後的名字

結論:在linux下,採用g++編譯完成後,函式名字的修飾發生改變,編譯器將函式引數型別資訊新增到修改後的名字中。函式修飾後變成:【_z+函式長度+函式名+型別首字母】

總結c語言沒辦法支援過載,因為同名函式沒辦法區分。而c++是通過函式修飾規則來區分,只要引數不同,修飾出來的名字就不一樣,就支援了過載。

需要注意的是:引數本身是不是const對函式過載沒有影響,影響的引數指向的型別。

如以下這兩對都不是函式過載:

a:

intcal

(int a,

int b)

;int

cal(

intconst a,

intconst b);b:

intcal

(int

* a,

int*b)

;int

cal(

int*

const a,

int*

const b)

;

而以下這一對是函式過載:

c:

intcal

(int

* a,

int* b)

;int

cal(

const

int* a,

const

int* b)

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

gcc和g 編譯的過程類似,細節處理不一樣 list.h list.c test.c 1.預處理 標頭檔案的展開 巨集替換 條件編譯 去掉注釋 list.i test.i 2.編譯 檢查語法錯誤 生成彙編 list.s test.s 3.彙編 將彙編 轉換成對應的機器 list.o test.o 4...

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

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

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

函式過載 一 1 原因 c語言不能函式過載與函式編譯後函式名有關。2 c語言編譯後的 名稱為 函式名 c語言 int add int a,int b 這裡是有意只給宣告不給定義,int add int a,char b 出錯後會在顯示框顯示編譯後的函式名 int add char a,int b i...