天天看點

C/C++函數重載

為什麼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風格來編譯

繼續閱讀