最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

C語言函數(shù)聲明以及函數(shù)原型

2023-03-13 13:33 作者:c語言-小新  | 我要投稿

C語言代碼由上到下依次執(zhí)行,原則上函數(shù)定義要出現(xiàn)在函數(shù)調(diào)用之前,否則就會(huì)報(bào)錯(cuò)。但在實(shí)際開發(fā)中,經(jīng)常會(huì)在函數(shù)定義之前使用它們,這個(gè)時(shí)候就需要提前聲明。

所謂聲明(Declaration),就是告訴編譯器我要使用這個(gè)函數(shù),你現(xiàn)在沒有找到它的定義不要緊,請不要報(bào)錯(cuò),稍后我會(huì)把定義補(bǔ)上。

函數(shù)聲明的格式非常簡單,相當(dāng)于去掉函數(shù)定義中的函數(shù)體,并在最后加上分號;,如下所示:

dataType? functionName( dataType1 param1, dataType2 param2 ... );

也可以不寫形參,只寫數(shù)據(jù)類型:

dataType? functionName( dataType1, dataType2 ... );

函數(shù)聲明給出了函數(shù)名、返回值類型、參數(shù)列表(重點(diǎn)是參數(shù)類型)等與該函數(shù)有關(guān)的信息,稱為函數(shù)原型(Function Prototype)。函數(shù)原型的作用是告訴編譯器與該函數(shù)有關(guān)的信息,讓編譯器知道函數(shù)的存在,以及存在的形式,即使函數(shù)暫時(shí)沒有定義,編譯器也知道如何使用它。

有了函數(shù)聲明,函數(shù)定義就可以出現(xiàn)在任何地方了,甚至是其他文件、靜態(tài)鏈接庫、動(dòng)態(tài)鏈接庫等。

【實(shí)例1】定義一個(gè)函數(shù) sum(),計(jì)算從 m 加到 n 的和,并將 sum() 的定義放到 main() 后面。


我們在 main() 函數(shù)中調(diào)用了 sum() 函數(shù),編譯器在它前面雖然沒有發(fā)現(xiàn)函數(shù)定義,但是發(fā)現(xiàn)了函數(shù)聲明,這樣編譯器就知道函數(shù)怎么使用了,至于函數(shù)體到底是什么,暫時(shí)可以不用操心,后續(xù)再把函數(shù)體補(bǔ)上就行。

【實(shí)例2】定義兩個(gè)函數(shù),計(jì)算1! + 2! + 3! + ... + (n-1)! + n!的和。


運(yùn)行結(jié)果:
1!+2!+...+9!+10! = 4037913

初學(xué)者編寫的代碼都比較簡單,頂多幾百行,完全可以放在一個(gè)源文件中。對于單個(gè)源文件的程序,通常是將函數(shù)定義放到 main() 的后面,將函數(shù)聲明放到 main() 的前面,這樣就使得代碼結(jié)構(gòu)清晰明了,主次分明。

使用者往往只關(guān)心函數(shù)的功能和函數(shù)的調(diào)用形式,很少關(guān)心函數(shù)的實(shí)現(xiàn)細(xì)節(jié),將函數(shù)定義放在最后,就是盡量屏蔽不重要的信息,凸顯關(guān)鍵的信息。將函數(shù)聲明放到 main() 的前面,在定義函數(shù)時(shí)也不用關(guān)注它們的調(diào)用順序了,哪個(gè)函數(shù)先定義,哪個(gè)函數(shù)后定義,都無所謂了。

然而在實(shí)際開發(fā)中,往往都是幾千行、上萬行、百萬行的代碼,將這些代碼都放在一個(gè)源文件中簡直是災(zāi)難,不但檢索麻煩,而且打開文件也很慢,所以必須將這些代碼分散到多個(gè)文件中。對于多個(gè)文件的程序,通常是將函數(shù)定義放到源文件(.c文件)中,將函數(shù)的聲明放到頭文件(.h文件)中,使用函數(shù)時(shí)引入對應(yīng)的頭文件就可以,編譯器會(huì)在鏈接階段找到函數(shù)體。

前面我們在使用 printf()、puts()、scanf() 等函數(shù)時(shí)引入了 stdio.h 頭文件,很多初學(xué)者認(rèn)為 stdio.h 中包含了函數(shù)定義(也就是函數(shù)體),只要有了頭文件就能運(yùn)行,其實(shí)不然,頭文件中包含的都是函數(shù)聲明,而不是函數(shù)定義,函數(shù)定義都放在了其它的源文件中,這些源文件已經(jīng)提前編譯好了,并以動(dòng)態(tài)鏈接庫或者靜態(tài)鏈接庫的形式存在,只有頭文件沒有系統(tǒng)庫的話,在鏈接階段就會(huì)報(bào)錯(cuò),程序根本不能運(yùn)行。

關(guān)于編譯鏈接的原理,以及如果將代碼分散到多個(gè)文件中,我們將在《C語言多文件編程》專題中詳細(xì)講解。

除了函數(shù),變量也有定義和聲明之分。實(shí)際開發(fā)過程中,變量定義需要放在源文件(.c文件)中,變量聲明需要放在頭文件(.h文件)中,在鏈接程序時(shí)會(huì)將它們對應(yīng)起來,這些我們也將在《C語言多文件編程》專題中詳細(xì)講解。

學(xué)完《C語言多文件編程》,你對C語言的認(rèn)識將會(huì)有質(zhì)的提升,瞬間豁然開朗,輕松超越 90% 的C語言程序員。

函數(shù)參考手冊

最后再補(bǔ)充一點(diǎn),函數(shù)原型給出了使用該函數(shù)的所有細(xì)節(jié),當(dāng)我們不知道如何使用某個(gè)函數(shù)時(shí),需要查找的是它的原型,而不是它的定義,我們往往不關(guān)心它的實(shí)現(xiàn)。

www.cplusplus.com?是一個(gè)非常給力的網(wǎng)站,它提供了所有C語言標(biāo)準(zhǔn)函數(shù)的原型,并給出了詳細(xì)的介紹和使用示例,可以作為一部權(quán)威的參考手冊。


C語言函數(shù)聲明以及函數(shù)原型的評論 (共 條)

分享到微博請遵守國家法律
尉犁县| 江安县| 富宁县| 周宁县| 汉阴县| 榕江县| 阳春市| 华安县| 侯马市| 安溪县| 邢台市| 沁源县| 万荣县| 湘潭市| 柳河县| 铁岭市| 穆棱市| 工布江达县| 广东省| 霸州市| 文化| 安西县| 平原县| 论坛| 湟中县| 黄梅县| 元朗区| 武义县| 大方县| 鞍山市| 同德县| 建湖县| 始兴县| 皮山县| 阿拉善左旗| 江都市| 郑州市| 阳东县| 漳平市| 衡山县| 云南省|