前向聲明和定義

首先讓我們看一段代碼:
int main()
{
    std::cout << "The sum of 3 and 4 is: " << add(3, 4) << std::endl;
    return 0;
}
 
int add(int x, int y)
{
    return x + y;
}

你希望得到的結(jié)果是:The sum of 3 and 4 is: 7,但是事實(shí)上侵俗,它不會(huì)被編譯通過(guò)。在XCode里你會(huì)看到這樣的錯(cuò)誤:Use of undeclared identifier 'add'增拥。

為什么會(huì)出現(xiàn)這樣的錯(cuò)誤呢寻歧?

原因是這樣的:解析器是順序讀取文件的,也就是說(shuō)猾封,解析器會(huì)從上到下一行行的解析代碼噪珊,當(dāng)解析器讀到add()這個(gè)函數(shù)的時(shí)候齐莲,我們還沒(méi)有定義add()這個(gè)函數(shù)选酗,所以解析器并不知道add是什么搀捷。

怎么解決這個(gè)問(wèn)題呢多望?

一般來(lái)說(shuō),有兩種辦法解決上面的問(wèn)題:

  • 方法一 在main()之前定義add()函數(shù)家厌,也就是說(shuō)在調(diào)用add()的時(shí)候椎工,mian()已經(jīng)知道它是什么了维蒙。
int add(int x, int y)
{
    return x + y;
}
 
int main()
{
    std::cout << "The sum of 3 and 4 is: " << add(3, 4) << std::endl;
    return 0;
}

這種解決辦法比較簡(jiǎn)單,但是我們?cè)囅胍幌拢喝绻覀儗懥藘蓚€(gè)函數(shù)A和B殖熟,并且A函數(shù)調(diào)用了B函數(shù)斑响,同時(shí)B函數(shù)也調(diào)用了A函數(shù),這種情況下到底誰(shuí)定義在前面就比較尷尬了纽门,先定義A函數(shù)营罢,解析器就不知道B是什么,同樣先定義B函數(shù)蝙搔,解析器也不知道A是什么能颁,那到底應(yīng)該怎么做呢伙菊?讓我們接著往下看敌土。

  • 方法二 使用前向聲明

前向聲明允許我們告訴解析器在函數(shù)定義函數(shù)體之前確定它的存在运翼。
我們?cè)趺礊楹瘮?shù)寫一個(gè)前向聲明呢血淌?要想寫一個(gè)前向聲明,我們使用一個(gè)叫做函數(shù)原型的東西悠夯。那什么又是函數(shù)原型呢沦补?函數(shù)原型由函數(shù)的返回值,函數(shù)名虚倒,以及形參構(gòu)成产舞,但是并不包括函數(shù)體(也就是花括號(hào)里面那一部分),因?yàn)楹瘮?shù)原型是一個(gè)聲明耻煤,所以要以分號(hào)結(jié)束擦囊。

int add(int x, int y); // add()函數(shù)的前向聲明(使用了函數(shù)原型)
 
int main()
{
    std::cout << "The sum of 3 and 4 is: " << add(3, 4) << std::endl; // 因?yàn)樯厦媲跋蚵暶髁薬dd()瞬场,所以這里不會(huì)報(bào)錯(cuò)。
    return 0;
}
 
int add(int x, int y) //盡管add()函數(shù)體到這里才被定義眼五。
{
    return x + y;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末看幼,一起剝皮案震驚了整個(gè)濱河市幌陕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌棚唆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋囊,死亡現(xiàn)場(chǎng)離奇詭異溜腐,居然都是意外死亡瓜喇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門现恼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人始锚,你說(shuō)我怎么就攤上這事喳逛。” “怎么了姐呐?”我有些...
    開(kāi)封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵曙砂,是天一觀的道長(zhǎng)骏掀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)笑陈,這世上最難降的妖魔是什么葵袭? 我笑而不...
    開(kāi)封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任坡锡,我火速辦了婚禮块请,結(jié)果婚禮上拳缠,老公的妹妹穿的比我還像新娘窟坐。我一直安慰自己,他們只是感情好哲鸳,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布徙菠。 她就那樣靜靜地躺著婿奔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪萍摊。 梳的紋絲不亂的頭發(fā)上冰木,一...
    開(kāi)封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天踊沸,我揣著相機(jī)與錄音,去河邊找鬼逼龟。 笑死审轮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的篡诽。 我是一名探鬼主播榴捡,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼达椰!你這毒婦竟也來(lái)了啰劲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤廷支,失蹤者是張志新(化名)和其女友劉穎栓辜,沒(méi)想到半個(gè)月后藕甩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡僵娃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年悯许,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辉阶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谆甜。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡集绰,死狀恐怖规辱,靈堂內(nèi)的尸體忽然破棺而出栽燕,到底是詐尸還是另有隱情罕袋,我是刑警寧澤浴讯,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布榆纽,位于F島的核電站,受9級(jí)特大地震影響奈籽,放射性物質(zhì)發(fā)生泄漏衣屏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一煮甥、第九天 我趴在偏房一處隱蔽的房頂上張望藕赞。 院中可真熱鬧成肘,春花似錦斧蜕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至深纲,卻和暖如春劲妙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背币呵。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工余赢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哈垢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓温赔,卻偏偏與公主長(zhǎng)得像鬼癣,于是被迫代替她去往敵國(guó)和親啤贩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子待秃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理章郁,服務(wù)發(fā)現(xiàn)暖庄,斷路器楼肪,智...
    卡卡羅2017閱讀 134,599評(píng)論 18 139
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,124評(píng)論 29 470
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法春叫,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法价匠,繼承相關(guān)的語(yǔ)法呛每,異常的語(yǔ)法踩窖,線程的語(yǔ)...
    子非魚_t_閱讀 31,581評(píng)論 18 399
  • iOS面試小貼士 ———————————————回答好下面的足夠了------------------------...
    不言不愛(ài)閱讀 1,962評(píng)論 0 7
  • ?Chrome瀏覽器洋腮,被公認(rèn)為瀏覽器中最好用的颓遏,除了由于國(guó)內(nèi)的關(guān)系導(dǎo)致無(wú)法登上Google賬號(hào)外,Chrome瀏覽...
    小斌PPT閱讀 2,110評(píng)論 4 11