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

創(chuàng)新互聯(lián)專(zhuān)注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、做網(wǎng)站、廣昌網(wǎng)絡(luò)推廣、小程序定制開(kāi)發(fā)、廣昌網(wǎng)絡(luò)營(yíng)銷(xiāo)、廣昌企業(yè)策劃、廣昌品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供廣昌建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.jbt999.com
如果在一個(gè)源文件中定義的函數(shù),只能被本文件中的函數(shù)調(diào)用,而不能被同一程序其它文件中的函數(shù)調(diào)用,這種函數(shù)稱(chēng)為內(nèi)部函數(shù)。
定義一個(gè)內(nèi)部函數(shù),只需在函數(shù)類(lèi)型前再加一個(gè)“static”關(guān)鍵字即可,如下所示:
static 函數(shù)類(lèi)型 函數(shù)名(函數(shù)參數(shù)表){……}
在定義函數(shù)時(shí),如果沒(méi)有加關(guān)鍵字“static”,或冠以關(guān)鍵字“extern”,表示此函數(shù)是外部函數(shù):
[extern] 函數(shù)類(lèi)型 函數(shù)名(函數(shù)參數(shù)表){……}
外部函數(shù)原型聲明要有extern
簡(jiǎn)單說(shuō),外部函數(shù)是用戶自定義函數(shù),該函數(shù)寫(xiě)在另一個(gè)文件里.
來(lái)自百度百科
C語(yǔ)言外部函數(shù)是一種可在自身所處的源文件及其他源文件中都能被調(diào)用的函數(shù)。外部函數(shù)的作用域是整個(gè)源程序。
函數(shù)調(diào)用
編輯
1、在定義函數(shù)時(shí),若在函數(shù)首部的最左端加關(guān)鍵字extern,則表示此函數(shù)是外部調(diào)用,可被其他文件調(diào)用,函數(shù)首部可以為
Extern int fun(int a,int b);
C語(yǔ)言規(guī)定,定義函數(shù)時(shí)省略了extern則隱含為外部函數(shù),可被其他文件調(diào)用
2、在需要調(diào)用函數(shù)的文件中,用extern對(duì)函數(shù)聲明,表示該函數(shù)是在其他文件中定義的外部函數(shù)
所以外函數(shù)只是一種引用方式,大項(xiàng)目多人分開(kāi)寫(xiě),可能會(huì)有多個(gè)文件,最后要整合在一起用。那被引用的文件中函數(shù)相對(duì)與引用者,就是外部函數(shù)。
因?yàn)?/p>
C語(yǔ)言編譯時(shí)要檢查語(yǔ)法,所以A不對(duì);
C語(yǔ)言沒(méi)有過(guò)程,只有函數(shù),所以B不對(duì);
C語(yǔ)言函數(shù)內(nèi)不能定義函數(shù),既不能嵌套定義,所以C不對(duì)。
排除法也知道是D了。當(dāng)然由“函數(shù)內(nèi)不能定義函數(shù)”也可以推出所有函數(shù)都是外部函數(shù)。
—— 其實(shí)這種說(shuō)法對(duì)外部函數(shù)的理解也還值得商榷。但其它的是完全不對(duì),也就選它吧。
定義在當(dāng)前翻譯單元(一般是.c文件包含了頭文件之后的結(jié)果)外,以extern前綴聲明的函數(shù)對(duì)于當(dāng)前翻譯單元來(lái)說(shuō)是外部函數(shù)。它提示編譯器,假定這個(gè)函數(shù)的定義存在,但不在當(dāng)前翻譯單元中。因此若語(yǔ)法正確,編譯器不對(duì)此函數(shù)產(chǎn)生標(biāo)識(shí)符未定義的錯(cuò)誤。鏈接器會(huì)檢查編譯器得到的若干目標(biāo)文件以及靜態(tài)庫(kù)文件中的包括函數(shù)在內(nèi)的符號(hào),如果不滿足唯一定義性則產(chǎn)生錯(cuò)誤,鏈接失敗,不會(huì)產(chǎn)生最終目標(biāo)文件(如.exe可執(zhí)行文件)。
對(duì)于加static前綴聲明的函數(shù),編譯器認(rèn)為定義在當(dāng)前翻譯單元或庫(kù)中且不會(huì)被其它翻譯單元引用(也就是說(shuō)函數(shù)僅對(duì)當(dāng)前源文件有效)。相對(duì)于extern(外部)函數(shù),這些函數(shù)可以稱(chēng)為internal(內(nèi)部)函數(shù)。
而不加extern或static聲明的函數(shù),默認(rèn)為定義在當(dāng)前翻譯單元中,且其它翻譯單元可以用extern函數(shù)聲明引用這個(gè)函數(shù)(對(duì)鏈接器可見(jiàn))。
對(duì)于非extern函數(shù),如果編譯器在當(dāng)前翻譯單元中找不到函數(shù)的定義,則產(chǎn)生標(biāo)識(shí)符未定義的編譯錯(cuò)誤,編譯失敗。
====
[原創(chuàng)回答團(tuán)]
有兩種理解.(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
內(nèi)部函數(shù)跟外部函數(shù)的區(qū)別在于:一個(gè)文件中定義的函數(shù)能否被其它文件調(diào)用。能被調(diào)用的函數(shù)在前面加extern(一般省略),而不能被調(diào)用的加static(不能省略),通常函數(shù)本質(zhì)上是全局的,也就是外部的可調(diào)用的。
我們通常調(diào)用的#include本質(zhì)上就是一些外部函數(shù)的集合,由于在一個(gè)文件中的函數(shù)要調(diào)用另外一個(gè)文件的函數(shù),要求在開(kāi)始聲明一下,為了省略這些聲明,我們引用include命令。
新聞名稱(chēng):外部函數(shù)和內(nèi)部函數(shù)c語(yǔ)言 c語(yǔ)言有內(nèi)部函數(shù)嗎
文章起源:http://www.jbt999.com/article36/hjjdpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、企業(yè)建站、App開(kāi)發(fā)、響應(yīng)式網(wǎng)站、網(wǎng)站營(yíng)銷(xiāo)、App設(shè)計(jì)
聲明:本網(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;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容