您好,歡迎進(jìn)入深圳市穎特新科技有限公司官方網(wǎng)站!
C語(yǔ)言代碼由上到下依次執(zhí)行,原則上函數(shù)定義要出現(xiàn)在函數(shù)調(diào)用之前,否則就會(huì)報(bào)錯(cuò)。但在實(shí)際開(kāi)發(fā)中,經(jīng)常會(huì)在函數(shù)定義之前使用它們,這個(gè)時(shí)候就需要提前聲明。
所謂聲明(Declaration),就是告訴編譯器我要使用這個(gè)函數(shù),你現(xiàn)在沒(méi)有找到它的定義不要緊,請(qǐng)不要報(bào)錯(cuò),稍后我會(huì)把定義補(bǔ)上。
函數(shù)聲明的格式非常簡(jiǎn)單,相當(dāng)于去掉函數(shù)定義中的函數(shù)體再加上分號(hào);
,如下所示:
返回值類(lèi)型 函數(shù)名( 類(lèi)型 形參, 類(lèi)型 形參… );
也可以不寫(xiě)形參,只寫(xiě)數(shù)據(jù)類(lèi)型:
返回值類(lèi)型 函數(shù)名( 類(lèi)型, 類(lèi)型…);
函數(shù)聲明給出了函數(shù)名、返回值類(lèi)型、參數(shù)列表(參數(shù)類(lèi)型)等與該函數(shù)有關(guān)的信息,稱(chēng)為函數(shù)原型(Function Prototype)。
函數(shù)原型的作用是告訴編譯器與該函數(shù)有關(guān)的信息,讓編譯器知道函數(shù)的存在,以及存在的形式,即使函數(shù)暫時(shí)沒(méi)有定義,編譯器也知道如何使用它。
有了函數(shù)聲明,函數(shù)定義就可以出現(xiàn)在任何地方了,甚至是其他文件、靜態(tài)鏈接庫(kù)、動(dòng)態(tài)鏈接庫(kù)等。
上節(jié)給出了計(jì)算sum = 1! + 2! + 3! + ... + (n-1)! + n!
的代碼,這節(jié)我們稍作修改,將 factorial() 和 sum() 函數(shù)的定義放到 main() 函數(shù)后面,請(qǐng)看下面的代碼:
運(yùn)行結(jié)果:
1!+2!+...+9!+10! = 4037913
我們知道,使用 printf()、puts()、scanf()、getchar() 等函數(shù)要引入 stdio.h 這個(gè)頭文件,很多初學(xué)者認(rèn)為 stdio.h 中包含了函數(shù)定義(也就是函數(shù)體),只要有了頭文件程序就能運(yùn)行。其實(shí)不然,頭文件中包含的都是函數(shù)聲明,而不是函數(shù)定義,函數(shù)定義都在系統(tǒng)庫(kù)中,只有頭文件沒(méi)有系統(tǒng)庫(kù)在鏈接時(shí)就會(huì)報(bào)錯(cuò),程序根本不能運(yùn)行。
最后再補(bǔ)充一點(diǎn),函數(shù)原型給出了使用該函數(shù)的所有細(xì)節(jié),當(dāng)我們不知道如何使用某個(gè)函數(shù)時(shí),需要查找的是它的原型,而不是它的定義,我們往往不關(guān)心它的實(shí)現(xiàn)。
上一篇:中興大事件
掃碼關(guān)注我們
傳真:0755-82591176
郵箱:vicky@yingtexin.net
地址:深圳市龍華區(qū)民治街道民治大道973萬(wàn)眾潤(rùn)豐創(chuàng)業(yè)園A棟2樓A08