extern表明這個(gè)函數(shù)或者變量在別的文件中定義的,在文件A中才能使用這個(gè)函數(shù)或者變量
創(chuàng)新互聯(lián)公司是一家專注于成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),新民網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:新民等地區(qū)。新民做網(wǎng)站價(jià)格咨詢:18982081108
不申明extern也能調(diào)用函數(shù)f,我試過了!
那是因?yàn)槟鉯nclude了文件B
extern關(guān)鍵字可以置于變量或者函數(shù)前,以標(biāo)示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量和函數(shù)時(shí)在其他模塊中尋找其定義。這里起到的是聲明作用范圍的用處。
extern的另外用法是當(dāng)C和C++混合編程時(shí)假如c++調(diào)用的是c源文檔定義的函數(shù)或變量,那么要加extern來告訴編譯器用c方式命名函數(shù):
文檔A.cpp調(diào)用a.c里面的變量i和函數(shù)callme()
拓展資料
1、可以通過把原函數(shù)名與參數(shù)信息結(jié)合,產(chǎn)生一個(gè)獨(dú)特的內(nèi)部名字,這種技術(shù)叫做名字修飾(Name Mangling)。名字修飾規(guī)則沒有一個(gè)標(biāo)準(zhǔn),所以不同的編譯器的名字修飾規(guī)則也不一樣。
下面是一組函數(shù),其中f()函數(shù)重載了:
f(void)和f(int)是不同的函數(shù),除了函數(shù)名相同以外沒有任何關(guān)系。當(dāng)生成obj目標(biāo)文件時(shí),為了區(qū)分它們,C++編譯器根據(jù)參數(shù)信息進(jìn)行了名字修飾:
2、C語言中沒有名字修飾(Name Mangling),因?yàn)镃語言不支持函數(shù)重載。但是如果C++中含有C代碼,在編譯時(shí)C++編譯器對(duì)C代碼的函數(shù)也會(huì)進(jìn)行名字修飾,函數(shù)名變了以后,將導(dǎo)致在C運(yùn)行庫中找不到對(duì)應(yīng)函數(shù),發(fā)生鏈接錯(cuò)誤。
為了防止C++編譯器對(duì)C代碼進(jìn)行名字修飾,我們將C代碼用extern “C”進(jìn)行鏈接指定,告訴編譯器,在生成中間文件時(shí),不要對(duì)這部分代碼進(jìn)行名字修飾,而是生成符合C規(guī)則的中間符號(hào)名。
添加了extern “C”鏈接指示后,上面的代碼就能夠正常運(yùn)行了。
在你的alarm()的后面加一個(gè)pause()這個(gè)函數(shù)吧,應(yīng)該可以的
希望回答能給你帶來幫助
如果滿意,請(qǐng)采納,如有疑問,可繼續(xù)追問。