有兩種理解.(1)庫函數(shù)是C語言的內(nèi)部函數(shù)或自帶函數(shù),外部函數(shù)即程序員自定函數(shù).
發(fā)展壯大離不開廣大客戶長期以來的信賴與支持,我們將始終秉承“誠信為本、服務(wù)至上”的服務(wù)理念,堅持“二合一”的優(yōu)良服務(wù)模式,真誠服務(wù)每家企業(yè),認(rèn)真做好每個細(xì)節(jié),不斷完善自我,成就企業(yè),實現(xiàn)共贏。行業(yè)涉及成都水泥攪拌車等,在網(wǎng)站建設(shè)、成都營銷網(wǎng)站建設(shè)、WAP手機(jī)網(wǎng)站、VI設(shè)計、軟件開發(fā)等項目上具有豐富的設(shè)計經(jīng)驗。
(2)凡加寫了extern 的函數(shù)是外部函數(shù).
第一種理解好懂:
C語言的內(nèi)部函數(shù)指的是C語言自帶的函數(shù),無論是動態(tài)鏈接的或靜態(tài)鏈接的. 這些函數(shù)通過C語言的頭文件定義了.
例如, sin(),cos()等數(shù)學(xué)函數(shù),在math.h中定義了,輸入輸出函數(shù) printf(),fgetc()在stdio.h中定義了,時間函數(shù)表time(),ctime()等在time.h中定義了.還有許多其他內(nèi)部函數(shù).編程時,只要用#include 庫名.h寫在編程頭部,程序中就可調(diào)用.
自定義函數(shù),就是用戶自己寫的函數(shù).
第二種凡加寫了extern 的函數(shù)是外部函數(shù):
自定義函數(shù)可以與程序的main()寫在同一個文件中,也可以寫在另一個文件中,這時你可能還另寫自己的頭文件或者寫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() 是外部說明,告訴編譯,main()里的my_func是外部函數(shù),要通過鏈接(.obj)得到.
如果把my_func寫在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
1、外部函數(shù)extern時聲明這個函數(shù)為外部函數(shù),本文件不做定義,只調(diào)用,編譯不會出錯,但不能運(yùn)行(沒有函數(shù)實體)。如果想有運(yùn)行結(jié)果就必須將函數(shù)實體包含進(jìn)來,所以文件包含和extern是配合使用的。文件包含只需要包含.h就是實體的頭文件,但有些軟件貌似不能識別頭文件和c的關(guān)系,所以就只能包含.c文件。
2、也就是說外部函數(shù)extern只是個聲明,他告訴編譯器我用到了一個外部函數(shù),但如果該文件沒有將函數(shù)實體包含進(jìn)來,編譯器是找不到的,依然是不能運(yùn)行的,所以extern只是個聲明,并沒有做任何事,只是這樣是沒用的。include是包含一個文件,就是類似于該文件復(fù)制到此處(只是說類似,其實是個查找路徑,讓編譯器去該路徑查找函數(shù))。
兩個可以放在同一目錄下,也可以放到不同的目錄下,前提是你在主函數(shù)文件中應(yīng)當(dāng)包含相應(yīng)的頭文件或C文件(路徑寫對應(yīng),寫完整就好)。
外部函數(shù)文件根據(jù)所寫函數(shù)需要將對應(yīng)頭文件包含進(jìn)來,stdio.h作為一個標(biāo)準(zhǔn)輸入輸出文件,只要你該外部文件內(nèi)涉及到輸入輸出等操作,就是必須要包含進(jìn)來的。
希望對你有所幫助!