四、寄存器變量
上述各類變量都存放在存儲(chǔ)器內(nèi), 因此當(dāng)對一個(gè)變量頻繁讀寫時(shí),必須要反復(fù)訪問內(nèi)存儲(chǔ)器,從而花費(fèi)大量的存取時(shí)間。 為此,C語言提供了另一種變量,即寄存器變量。這種變量存放在CPU的寄存器中,使用時(shí),不需要訪問內(nèi)存,而直接從寄存器中讀寫, 這樣可提高效率。寄存器變量的說明符是register。 對于循環(huán)次數(shù)較多的循環(huán)控制變量及循環(huán)體內(nèi)反復(fù)使用的變量均可定義為寄存器變量。
[例5.16]求∑200i=1imain()
{
register i,s=0;
for(i=1;i<=200;i++)
s=s+i;
printf("s=%d\n",s);
}
本程序循環(huán)200次,i和s都將頻繁使用,因此可定義為寄存器變量。
對寄存器變量還要說明以下幾點(diǎn):
1. 只有局部自動(dòng)變量和形式參數(shù)才可以定義為寄存器變量。因?yàn)榧拇嫫髯兞繉儆趧?dòng)態(tài)存儲(chǔ)方式。凡需要采用靜態(tài)存儲(chǔ)方式的量不能定義為寄存器變量。
2. 在Turbo C,MS C等微機(jī)上使用的C語言中, 實(shí)際上是把寄存器變量當(dāng)成自動(dòng)變量處理的。因此速度并不能提高。 而在程序中允許使用寄存器變量只是為了與標(biāo)準(zhǔn)C保持一致。3. 即使能真正使用寄存器變量的機(jī)器,由于CPU 中寄存器的個(gè)數(shù)是有限的,因此使用寄存器變量的個(gè)數(shù)也是有限的。
內(nèi)部函數(shù)和外部函數(shù)
函數(shù)一旦定義后就可被其它函數(shù)調(diào)用。 但當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí), 在一個(gè)源文件中定義的函數(shù)能否被其它源文件中的函數(shù)調(diào)用呢?為此,C語言又把函數(shù)分為兩類:
一、內(nèi)部函數(shù)
如果在一個(gè)源文件中定義的函數(shù)只能被本文件中的函數(shù)調(diào)用,而不能被同一源程序其它文件中的函數(shù)調(diào)用, 這種函數(shù)稱為內(nèi)部函
數(shù)。定義內(nèi)部函數(shù)的一般形式是: static 類型說明符 函數(shù)名(形參表) 例如:
static int f(int a,int b) 內(nèi)部函數(shù)也稱為靜態(tài)函數(shù)。但此處靜態(tài)static 的含義已不是指存儲(chǔ)方式,而是指對函數(shù)的調(diào)用范圍只局限于本文件。 因此在不同的源文件中定義同名的靜態(tài)函數(shù)不會(huì)引起混淆。
二、外部函數(shù)
外部函數(shù)在整個(gè)源程序中都有效,其定義的一般形式為: extern 類型說明符 函數(shù)名(形參表) 例如:
extern int f(int a,int b)如在函數(shù)定義中沒有說明extern或static則隱含為extern。在一個(gè)源文件的函數(shù)中調(diào)用其它源文件中定義的外部函數(shù)時(shí),應(yīng) 用extern說明被調(diào)函數(shù)為外部函數(shù)。例如:
F1.C (源文件一)
main()
{
extern int f1(int i); /*外部函數(shù)說明,表示f1函
數(shù)在其它源文件中*/
……
}
F2.C (源文件二)
extern int f1(int i); /*外部函數(shù)定義*/
{
……
}
相關(guān)推薦:計(jì)算機(jī)等考二級C語言備考:C語言/C++編譯過程北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |