為什麼c++支援過載而C語言不支援過載
阿新 • • 發佈:2019-02-09
學過C語言和C++的人都知道,
C++支援函式過載而C語言不支援函式過載。
而所謂的函式過載就是指:
在同一作用域類,一組函式的函式名相同,引數列表不同(個數不同或型別不同),返回值可同可不同。
那麼問題來了,為什麼C++支援函式過載,而C語言不支援呢?
從程式碼的編譯到執行,在VC6.0或VS這種編譯器下,它是系統直接完成了翻譯與連結,直接生成了執行結果。
編譯器內部完成了翻譯部分:
1.預處理
1)標頭檔案展開
2)巨集的替換
3)去註釋
4)條件編譯
2.編譯過程:將高階語言轉為組合語言
3.彙編過程:組合語言轉為二進位制程式
連結部分:所引用的資料鏈接進來
比如一個函式的宣告如下:
void function(int x,int y);
在c語言中,編譯器在編譯後在庫中的名字為_function
在c++中,編譯器在編譯後在庫中的名字為_function_int_int
還有一個函式的宣告如下:
void function(float x,float y);
在c語言中,編譯器在編譯後在庫中的名字為_function
在c++中,編譯器在編譯後在庫中的名字為_function_float_float
在連結時,都是找名字進行連結的,就比如以上兩個函式,
在C語言中兩個的名字一樣,就會在連結中報錯。
C++中它們的名字不一樣,所以就不會報錯。
C++支援函式過載而C語言不支援函式過載。
而所謂的函式過載就是指:
在同一作用域類,一組函式的函式名相同,引數列表不同(個數不同或型別不同),返回值可同可不同。
那麼問題來了,為什麼C++支援函式過載,而C語言不支援呢?
從程式碼的編譯到執行,在VC6.0或VS這種編譯器下,它是系統直接完成了翻譯與連結,直接生成了執行結果。
編譯器內部完成了翻譯部分:
1.預處理
1)標頭檔案展開
2)巨集的替換
3)去註釋
4)條件編譯
2.編譯過程:將高階語言轉為組合語言
3.彙編過程:組合語言轉為二進位制程式
連結部分:所引用的資料鏈接進來
比如一個函式的宣告如下:
void function(int x,int y);
在c語言中,編譯器在編譯後在庫中的名字為_function
在c++中,編譯器在編譯後在庫中的名字為_function_int_int
還有一個函式的宣告如下:
void function(float x,float y);
在c語言中,編譯器在編譯後在庫中的名字為_function
在c++中,編譯器在編譯後在庫中的名字為_function_float_float
在連結時,都是找名字進行連結的,就比如以上兩個函式,
在C語言中兩個的名字一樣,就會在連結中報錯。
C++中它們的名字不一樣,所以就不會報錯。