外部變量是在函數(shù)外部定義的全局變量,它的作用域是從變量的定義處開始,到本程序文件的結(jié)尾。在此作用域內(nèi),全局變量可為各個(gè)函數(shù)所引用。編譯時(shí)將外部變量分配在靜態(tài)存儲(chǔ)區(qū)。
目前創(chuàng)新互聯(lián)已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、翁源網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
有時(shí)要用extern來聲明外部變量,以擴(kuò)展外部變量的作用域。 也可用static聲明外部變量,使該變量不能被其他文件引用。
用extern聲明外部變量
extern可省略不寫。
本文件里:在一個(gè)文件里,有不止一個(gè)函數(shù),外部變量在第一個(gè)函數(shù)后面定義。若用extern在第一個(gè)函數(shù)前聲明該變量則該變量可以在第一個(gè)函數(shù)中使用。
多個(gè)文件中:在其他文件中若想要用該文件中已聲明的變量,則在文件頭部聲明該變量,即可在文件中使用。
用static聲明外部變量
static聲明后該外部變量就只能在本文件中使用。
函數(shù)是用戶與程序的接口,在定義一個(gè)函數(shù)前,首先要清楚以下三個(gè)問題。1) 函數(shù)的功能實(shí)現(xiàn)及算法選擇。算法選擇會(huì)在后續(xù)文章詳細(xì)講解,本節(jié)重點(diǎn)關(guān)注函數(shù)的功能實(shí)現(xiàn)。一般選取能體現(xiàn)函數(shù)功能的函數(shù)名,且見名知意,如求和函數(shù)的函數(shù)名可取為 add,求最大值的函數(shù)名可取為 max,排序函數(shù)可取名為 sort 等。2) 需要用戶傳給該函數(shù)哪些參數(shù)、什么類型,即函數(shù)參數(shù)。3) 函數(shù)執(zhí)行完后返回給調(diào)用者的參數(shù)及類型,即函數(shù)返回值類型。 函教定義格式 函數(shù)定義的一般格式為: 返回類型 函數(shù)名 (類型參數(shù)1,類型參數(shù)2,…) {函數(shù)體 }也可以不含參數(shù),不含參數(shù)時(shí),參數(shù)表中可寫關(guān)鍵字 void 或省略,為規(guī)范起見,教程中對(duì)沒有參數(shù)的函數(shù),參數(shù)表中統(tǒng)一寫 void。例如: 類型 函數(shù)名 () {函數(shù)體 }等價(jià)于: 類型 函數(shù)名 (void) //建議的書寫方式 {函數(shù)體 } 如果該函數(shù)沒有返回類型,則為 void 類型。例如: void add (int x,int y) {printf ("sum=%d\n", x+y); } 除了 void 類型外,在函數(shù)體中,均需要顯式使用 return 語句返回對(duì)應(yīng)的表達(dá)式的值。 函教返回值 函數(shù)的值是指調(diào)用函數(shù)結(jié)束時(shí),執(zhí)行函數(shù)體所得并返回給主調(diào)函數(shù)的值。 關(guān)于函數(shù)返回值說明如下。1) 帶返回值的函數(shù),其值一般使用 return 語句返回給調(diào)用者。其格式為: return 表達(dá)式;或者 return (表達(dá)式);例如: int add (int a, int b) {return (a + b); //return 后為表達(dá)式 } 函數(shù)可以含一個(gè)或多個(gè) return 語句,但每次調(diào)用時(shí)只能執(zhí)行其中一個(gè) return 語句。例如,求整數(shù)絕對(duì)值的函數(shù): int f (int n) //含多個(gè)return語句,但每次調(diào)用只執(zhí)行一個(gè) {if (n = 0)return n;elsereturn -n; }
兩個(gè)可以放在同一目錄下,也可以放到不同的目錄下,前提是你在主函數(shù)文件中應(yīng)當(dāng)包含相應(yīng)的頭文件或C文件(路徑寫對(duì)應(yīng),寫完整就好)。
外部函數(shù)文件根據(jù)所寫函數(shù)需要將對(duì)應(yīng)頭文件包含進(jìn)來,stdio.h作為一個(gè)標(biāo)準(zhǔn)輸入輸出文件,只要你該外部文件內(nèi)涉及到輸入輸出等操作,就是必須要包含進(jìn)來的。
希望對(duì)你有所幫助!
有兩種理解.(1)庫函數(shù)是C語言的內(nèi)部函數(shù)或自帶函數(shù),外部函數(shù)即程序員自定函數(shù).
(2)凡加寫了extern 的函數(shù)是外部函數(shù).
第一種理解好懂:
C語言的內(nèi)部函數(shù)指的是C語言自帶的函數(shù),無論是動(dòng)態(tài)鏈接的或靜態(tài)鏈接的. 這些函數(shù)通過C語言的頭文件定義了.
例如, sin(),cos()等數(shù)學(xué)函數(shù),在math.h中定義了,輸入輸出函數(shù) printf(),fgetc()在stdio.h中定義了,時(shí)間函數(shù)表time(),ctime()等在time.h中定義了.還有許多其他內(nèi)部函數(shù).編程時(shí),只要用#include 庫名.h寫在編程頭部,程序中就可調(diào)用.
自定義函數(shù),就是用戶自己寫的函數(shù).
第二種凡加寫了extern 的函數(shù)是外部函數(shù):
自定義函數(shù)可以與程序的main()寫在同一個(gè)文件中,也可以寫在另一個(gè)文件中,這時(shí)你可能還另寫自己的頭文件或者寫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