為什麼C語言不支援函數重載
- 編譯器在編譯.c檔案時,隻會給函數進行簡單的命名。
- 具體方法是:給函數名之前加上 “_”
- 是以兩個函數名相同的函數在編譯之後的函數名也相同
C++中函數重載底層是如何處理的
- 在.cpp檔案中,雖然函數名一樣,但是他們在符号表中生成的名稱不一樣
- ?表示名稱開始
- ?後面是函數名
- @@YA表示參數表開始
- 後面的字元分别表示:傳回值類型、參數1類型、參數2類型…
- @Z表示名稱結束
- 由于在.cpp檔案中,兩個函數生成的符号表中名稱不一樣,是以可以編譯通過。
C++中是否能将一個函數按照C的風格來編譯
#include<iostream>
#include<Windows.h>
using namespace std;
extern "C" int Add(int a, int b)
{
return a + b;
}
int main()
{
cout << Add(10, 20) << endl;
system("pause");
return 0;
}
- 可以按照C風格來編譯,隻需在函數名前加extern “C”就可以完成按照C風格來編譯