欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語(yǔ)言外部庫(kù)函數(shù) C語(yǔ)言外部函數(shù)

什么叫外部函數(shù)? (C語(yǔ)言問(wèn)題)

當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),C語(yǔ)言根據(jù)函數(shù)能否被其它源文件中的函數(shù)調(diào)用,將函數(shù)分為內(nèi)部函數(shù)和外部函數(shù)。

我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、南通ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的南通網(wǎng)站制作公司

如果在一個(gè)源文件中定義的函數(shù),只能被本文件中的函數(shù)調(diào)用,而不能被同一程序其它文件中的函數(shù)調(diào)用,這種函數(shù)稱為內(nèi)部函數(shù)。

定義一個(gè)內(nèi)部函數(shù),只需在函數(shù)類型前再加一個(gè)“static”關(guān)鍵字即可,如下所示:

static 函數(shù)類型 函數(shù)名(函數(shù)參數(shù)表){……}

在定義函數(shù)時(shí),如果沒(méi)有加關(guān)鍵字“static”,或冠以關(guān)鍵字“extern”,表示此函數(shù)是外部函數(shù):

[extern] 函數(shù)類型 函數(shù)名(函數(shù)參數(shù)表){……}

外部函數(shù)原型聲明要有extern

簡(jiǎn)單說(shuō),外部函數(shù)是用戶自定義函數(shù),該函數(shù)寫(xiě)在另一個(gè)文件里.

單片機(jī) C語(yǔ)言,如何調(diào)用外部自定義函數(shù)。

函數(shù)定義好以后,要被其它函數(shù)調(diào)用了才能被執(zhí)行。C

語(yǔ)言的函數(shù)是能相互調(diào)用的,

但在調(diào)用函數(shù)前,必須對(duì)函數(shù)的類型進(jìn)行說(shuō)明,就算是標(biāo)準(zhǔn)庫(kù)函數(shù)也不例外。標(biāo)準(zhǔn)庫(kù)函數(shù)的

說(shuō)明會(huì)被按功能分別寫(xiě)在不一樣的頭文件中,使用時(shí)只要在文件最前面用#include

預(yù)處理語(yǔ)

句引入相應(yīng)的頭文件。如前面一直有使用的

printf

函數(shù)說(shuō)明就是放在文件名為

stdio.h

頭文件中。調(diào)用就是指一個(gè)函數(shù)體中引用另一個(gè)已定義的函數(shù)來(lái)實(shí)現(xiàn)所需要的功能,這個(gè)時(shí)候函

數(shù)體稱為主調(diào)用函數(shù),函數(shù)體中所引用的函數(shù)稱為被調(diào)用函數(shù)。一個(gè)函數(shù)體中能調(diào)用數(shù)個(gè)

其它的函數(shù),這些被調(diào)用的函數(shù)同樣也能調(diào)用其它函數(shù),也能嵌套調(diào)用。筆者本人認(rèn)為

主函數(shù)只是相對(duì)于被調(diào)用函數(shù)而言。在

c51

語(yǔ)言中有一個(gè)函數(shù)是不能被其它函數(shù)所調(diào)用的,

它就是

main

主函數(shù)。調(diào)用函數(shù)的一般形式如下:

函數(shù)名

(實(shí)際參數(shù)表)

“函數(shù)名”就是指被調(diào)用的函數(shù)。實(shí)際參數(shù)表能為零或多個(gè)參數(shù),多個(gè)參數(shù)時(shí)要用逗

號(hào)隔開(kāi),每個(gè)參數(shù)的類型、位置應(yīng)與函數(shù)定義時(shí)所的形式參數(shù)一一對(duì)應(yīng),它的作用就是把參

數(shù)傳到被調(diào)用函數(shù)中的形式參數(shù),如果類型不對(duì)應(yīng)就會(huì)產(chǎn)生一些錯(cuò)誤。調(diào)用的函數(shù)是無(wú)參函

數(shù)時(shí)不寫(xiě)參數(shù),但不能省后面的括號(hào)。

在以前的一些例子我們也能看不一樣的調(diào)用方式:

1.函數(shù)語(yǔ)句

printf

("Hello

World!n");

這是在

我們的第一個(gè)程序中出現(xiàn)的,它以

"Hello

World!n"為參數(shù)調(diào)用

printf

這個(gè)庫(kù)函數(shù)。在這里函數(shù)調(diào)用被看作了一條語(yǔ)句。

2.函數(shù)參數(shù)

“函數(shù)參數(shù)”這種方式是指被調(diào)用函數(shù)的返回值當(dāng)作另一個(gè)被調(diào)用函數(shù)的實(shí)際參

數(shù),如

temp=StrToInt(CharB(16));CharB

的返回值作為

StrToInt

函數(shù)的實(shí)際參數(shù)傳遞。

3.函數(shù)表達(dá)式

而在上一篇的例子中有

temp

=

Count();這樣一句,這個(gè)時(shí)候函數(shù)的調(diào)用作為一個(gè)運(yùn)算

對(duì)象出現(xiàn)在表達(dá)式中,能稱為函數(shù)表達(dá)式。例子中

Count()返回一個(gè)

int

類型的返回

值直接賦值給

temp。注意的是這種調(diào)用方式要求被調(diào)用的函數(shù)能返回一個(gè)同類型的值,

不然會(huì)出現(xiàn)不可預(yù)料的錯(cuò)誤。

前面說(shuō)到調(diào)用函數(shù)前要對(duì)被調(diào)用的函數(shù)進(jìn)行說(shuō)明。標(biāo)準(zhǔn)庫(kù)函數(shù)只要用#include

引入已

寫(xiě)好說(shuō)明的頭文件,在程序就能直接調(diào)用函數(shù)了。如調(diào)用的是自定義的函數(shù)則要用如下形

式編寫(xiě)函數(shù)類型說(shuō)明

類型標(biāo)識(shí)符

函數(shù)的名稱(形式參數(shù)表);

這樣的說(shuō)明方式是用在被調(diào)函數(shù)定義和主調(diào)函數(shù)是在同一文件中。你也能把這些寫(xiě)到

文件名.h

的文件中用#include

"文件名.h"引入。如果被調(diào)函數(shù)的定義和主調(diào)函數(shù)不是在同

一文件中的,則要用如下的方式進(jìn)行說(shuō)明,說(shuō)明被調(diào)函數(shù)的定義在同一項(xiàng)目的不一樣文件之上,

其實(shí)庫(kù)函數(shù)的頭文件也是如此說(shuō)明庫(kù)函數(shù)的,如果說(shuō)明的函數(shù)也能稱為外部函數(shù)。

extern

類型標(biāo)識(shí)符

函數(shù)的名稱(形式參數(shù)表);

函數(shù)的定義和說(shuō)明是完全不一樣的,在編譯的角度上看函數(shù)的定義是把函數(shù)編譯存放在

ROM

的某一段地址上,而函數(shù)說(shuō)明是告訴編譯器要在程序中使用那些函數(shù)并確定函數(shù)的地

址。如果在同一文件中被調(diào)函數(shù)的定義在主調(diào)函數(shù)之前,這個(gè)時(shí)候能不用說(shuō)明函數(shù)類型。也就

是說(shuō)在

main

函數(shù)之前定義的函數(shù),在程序中就能不用寫(xiě)函數(shù)類型說(shuō)明了。能在一個(gè)函

數(shù)體調(diào)用另一個(gè)函數(shù)(嵌套調(diào)用),但不允許在一個(gè)函數(shù)定義中定義另一個(gè)函數(shù)。還要注意

的是函數(shù)定義和說(shuō)明中的“類型、形參表、名稱”等都要相一致。

c語(yǔ)言中外部函數(shù)是什么意思

有兩種理解.(1)庫(kù)函數(shù)是C語(yǔ)言的內(nèi)部函數(shù)或自帶函數(shù),外部函數(shù)即程序員自定函數(shù).

(2)凡加寫(xiě)了extern 的函數(shù)是外部函數(shù).

第一種理解好懂:

C語(yǔ)言的內(nèi)部函數(shù)指的是C語(yǔ)言自帶的函數(shù),無(wú)論是動(dòng)態(tài)鏈接的或靜態(tài)鏈接的. 這些函數(shù)通過(guò)C語(yǔ)言的頭文件定義了.

例如, sin(),cos()等數(shù)學(xué)函數(shù),在math.h中定義了,輸入輸出函數(shù) printf(),fgetc()在stdio.h中定義了,時(shí)間函數(shù)表time(),ctime()等在time.h中定義了.還有許多其他內(nèi)部函數(shù).編程時(shí),只要用#include 庫(kù)名.h寫(xiě)在編程頭部,程序中就可調(diào)用.

自定義函數(shù),就是用戶自己寫(xiě)的函數(shù).

第二種凡加寫(xiě)了extern 的函數(shù)是外部函數(shù):

自定義函數(shù)可以與程序的main()寫(xiě)在同一個(gè)文件中,也可以寫(xiě)在另一個(gè)文件中,這時(shí)你可能還另寫(xiě)自己的頭文件或者寫(xiě)extern....,告訴編譯器,main中用到的某某函數(shù)是"外部函數(shù)".

例如,main()在a.c中,自定義函數(shù)my_func()在a2.c中

a.c內(nèi)容:

#include stdio.h

extern float my_func(float a);

main()

{

printf("result=%f\n",my_func(2.0));

}

a2.c 內(nèi)容:

float my_func(float a)

{

return a;

}

編譯:

cl -c a.c [得到a.obj]

cl -c a2.c [得到a2.obj]

cl a.obj a2.obj [鏈接成a.exe]

運(yùn)行:

a.exe

result=2.000000

extern float my_func() 是外部說(shuō)明,告訴編譯,main()里的my_func是外部函數(shù),要通過(guò)鏈接(.obj)得到.

如果把my_func寫(xiě)在a.c里:

#include stdio.h

float my_func(float a){

retun a;

}

main()

{

printf("result=%f\n",my_func(2.0));

}

my_func() 就不是外部函數(shù).

編譯:

cl a.c [得a.exe]

運(yùn)行:

a.exe

result=2.000000

C語(yǔ)言中怎么調(diào)用外部函數(shù)?

1、外部函數(shù)extern時(shí)聲明這個(gè)函數(shù)為外部函數(shù),本文件不做定義,只調(diào)用,編譯不會(huì)出錯(cuò),但不能運(yùn)行(沒(méi)有函數(shù)實(shí)體)。如果想有運(yùn)行結(jié)果就必須將函數(shù)實(shí)體包含進(jìn)來(lái),所以文件包含和extern是配合使用的。文件包含只需要包含.h就是實(shí)體的頭文件,但有些軟件貌似不能識(shí)別頭文件和c的關(guān)系,所以就只能包含.c文件。

2、也就是說(shuō)外部函數(shù)extern只是個(gè)聲明,他告訴編譯器我用到了一個(gè)外部函數(shù),但如果該文件沒(méi)有將函數(shù)實(shí)體包含進(jìn)來(lái),編譯器是找不到的,依然是不能運(yùn)行的,所以extern只是個(gè)聲明,并沒(méi)有做任何事,只是這樣是沒(méi)用的。include是包含一個(gè)文件,就是類似于該文件復(fù)制到此處(只是說(shuō)類似,其實(shí)是個(gè)查找路徑,讓編譯器去該路徑查找函數(shù))。

本文題目:c語(yǔ)言外部庫(kù)函數(shù) C語(yǔ)言外部函數(shù)
URL網(wǎng)址:http://www.chinadenli.net/article44/doocche.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站自適應(yīng)網(wǎng)站網(wǎng)站改版面包屑導(dǎo)航靜態(tài)網(wǎng)站定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)