內(nèi)部函數(shù)跟外部函數(shù)的區(qū)別在于:一個文件中定義的函數(shù)能否被其它文件調(diào)用。能被調(diào)用的函數(shù)在前面加extern(一般省略),而不能被調(diào)用的加static(不能省略),通常函數(shù)本質(zhì)上是全局的,也就是外部的可調(diào)用的。
創(chuàng)新互聯(lián)主營東阿網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都App制作,東阿h5重慶小程序開發(fā)公司搭建,東阿網(wǎng)站營銷推廣歡迎東阿等地區(qū)企業(yè)咨詢
我們通常調(diào)用的#include本質(zhì)上就是一些外部函數(shù)的集合,由于在一個文件中的函數(shù)要調(diào)用另外一個文件的函數(shù),要求在開始聲明一下,為了省略這些聲明,我們引用include命令。
有兩種理解.(1)庫函數(shù)是C語言的內(nèi)部函數(shù)或自帶函數(shù),外部函數(shù)即程序員自定函數(shù).
(2)凡加寫了extern 的函數(shù)是外部函數(shù).
第一種理解好懂:
C語言的內(nèi)部函數(shù)指的是C語言自帶的函數(shù),無論是動態(tài)鏈接的或靜態(tài)鏈接的. 這些函數(shù)通過C語言的頭文件定義了.
例如, sin(),cos()等數(shù)學函數(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]
運行:
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]
運行:
a.exe
得
result=2.000000
因為
C語言編譯時要檢查語法,所以A不對;
C語言沒有過程,只有函數(shù),所以B不對;
C語言函數(shù)內(nèi)不能定義函數(shù),既不能嵌套定義,所以C不對。
排除法也知道是D了。當然由“函數(shù)內(nèi)不能定義函數(shù)”也可以推出所有函數(shù)都是外部函數(shù)。
—— 其實這種說法對外部函數(shù)的理解也還值得商榷。但其它的是完全不對,也就選它吧。