C++: 函數(shù)重載(overload)和 extern

函數(shù)重載

  1. 定義:
    函數(shù)名相同详囤,參數(shù)類型桨武、參數(shù)數(shù)量或者參數(shù)順序不同
int sum(int a, int b) {
    return a + b;
}

int sum(int a, int b, int c) {
    return a + b + c;
}
  1. 本質(zhì):
    采用name mangling技術(shù)或者name decoratin技術(shù)

    • name mangling技術(shù)
      a.C++編譯器默認(rèn)會對符號名(變量名肋拔、函數(shù)名)進行改編锈津、修飾呀酸,有些地方翻譯為“命名傾軋”;b.重載時會生成多個不同的函數(shù)名琼梆,不同編譯器(MSVC性誉、g++)有不同的生成規(guī)則
  2. 注意點
    a.返回值類型與函數(shù)重載無關(guān)
    b.調(diào)用函數(shù)時,實參的隱式類型轉(zhuǎn)換可能會產(chǎn)生二義性


extern

  1. extern "C" 修飾的代碼會按照C語言的方式編譯
  2. 如果函數(shù)同時有聲明和實現(xiàn)茎杂, 要讓函數(shù)聲明被 extern "C" 修飾错览,函數(shù)實現(xiàn)可以不用
extern "C" int sum(int a, int b);

int sum(int a, int b) {
    return a + b;
}
  1. 由于C、C++編譯規(guī)則的不同煌往,在C倾哺、C++混合開發(fā)時轧邪,可能會經(jīng)常出現(xiàn)下邊的操作:
    C++在調(diào)用C語言API時,需要使用extern "C" 修飾羞海,如下:
// C語言:頭文件
#ifndef Sum_h
#define Sum_h
 int sum(int a, int b);
#endif /* Sum_h */

// Sum.c文件
#include "Sum.h"
int sum (int a, int b) {
    return a + b;
}

// main.cpp文件
#include <iostream>
using namespace std;
// 此處需要extern "C"修飾忌愚,否則編譯不通過
extern "C" {
    #include "Sum.h"
}
int main(int argc, const char * argv[]) {
    sum(20, 10);
    cout << sum(10, 20) << endl;
    return 0;
}

如上我們需要在每一個調(diào)用C語言的.cpp文件都寫extern "C",這樣是很麻煩的一件事兒却邓。那么硕糊,有沒有更好的方式呢?C++中定義的__cplusplus這個宏給了我們啟發(fā)腊徙,我們可以在.h文件中做文章简十,當(dāng)編譯器檢測到是C++文件的時候就加上extern "C",否則不加

Sum.h.png

main.cpp.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撬腾,一起剝皮案震驚了整個濱河市螟蝙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌时鸵,老刑警劉巖胶逢,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異饰潜,居然都是意外死亡初坠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門彭雾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碟刺,“玉大人,你說我怎么就攤上這事薯酝“牍粒” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵吴菠,是天一觀的道長者填。 經(jīng)常有香客問我,道長做葵,這世上最難降的妖魔是什么占哟? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮酿矢,結(jié)果婚禮上榨乎,老公的妹妹穿的比我還像新娘。我一直安慰自己瘫筐,他們只是感情好蜜暑,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著策肝,像睡著了一般肛捍。 火紅的嫁衣襯著肌膚如雪隐绵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天拙毫,我揣著相機與錄音氢橙,去河邊找鬼。 笑死恬偷,一個胖子當(dāng)著我的面吹牛悍手,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袍患,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坦康,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诡延?” 一聲冷哼從身側(cè)響起滞欠,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肆良,沒想到半個月后筛璧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡惹恃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年夭谤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巫糙。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡朗儒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出参淹,到底是詐尸還是另有隱情醉锄,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布浙值,位于F島的核電站恳不,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏开呐。R本人自食惡果不足惜烟勋,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望负蚊。 院中可真熱鬧神妹,春花似錦颓哮、人聲如沸家妆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伤极。三九已至蛹找,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哨坪,已是汗流浹背庸疾。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留当编,地道東北人届慈。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像忿偷,于是被迫代替她去往敵國和親金顿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容