前面說(shuō)了文件作用域的問(wèn)題,如果在聲明全局變量時(shí),加上static修飾符,那么該變量只在當(dāng)前文件內(nèi)可見(jiàn),而extern又可以引用其它文件里的變量。所以在一個(gè)大型程序中,每個(gè)程序員只是完成其中的一小塊,為了讓自己的變量不讓其他程序員使用,保持一定的獨(dú)立性,經(jīng)常在全局變量前加static。我們可以這樣來(lái)說(shuō)明一下:
還是上面的兩個(gè)文件,現(xiàn)在再增加一個(gè)文件3.c,內(nèi)容為:
static int num;
void a()
{
num=6;
}
把1.prj文件后面加上3.c 這樣,我們生成的1.exe文件,執(zhí)行時(shí)輸出是5,而不是6。因?yàn)?.c文件的num變量增加了文件作用域,在其他文件中是無(wú)法使用它的。
4.寄存器存儲(chǔ)類型
被聲明為寄存器存儲(chǔ)類型的變量,除了程序無(wú)法得到其地址外,其余都和自動(dòng)變量一樣。至于什么是變量地址,以后說(shuō)指針時(shí)會(huì)詳細(xì)介紹。
main()
{
register int num;
num=100;
printf(%d,num);
}
使用寄存器存儲(chǔ)類型的目的是讓程序員指定某個(gè)局部變量存放在計(jì)算機(jī)的某個(gè)硬件寄存器里而不是內(nèi)存中,以提高程序的運(yùn)行速度。不過(guò),這只是反映了程序員的主觀意愿,編譯器可以忽略寄存器存儲(chǔ)類型修飾符。
寄存器變量的地址是無(wú)法取得的,因?yàn)榻^大多數(shù)計(jì)算機(jī)的硬件寄存器都不占用內(nèi)存地址。而且,即使編譯器忽略寄存器類型修飾符把變量放在可設(shè)定地址的內(nèi)存中,我們也無(wú)法取地址的限制仍然存在。
要想有效的利用寄存器存儲(chǔ)類型,必須象匯編語(yǔ)言程序員那樣了解處理器的內(nèi)部構(gòu)造,知道可用于存放變量的寄存器的數(shù)量和種類,以及他們是如何工作的。但是,不同計(jì)算機(jī)在這些細(xì)節(jié)上未必是一樣的,因此對(duì)于一個(gè)可移植的程序來(lái)說(shuō),寄存器存儲(chǔ)類型的作用不大。特別是現(xiàn)在很多編譯器都能提供很好的優(yōu)化效果,遠(yuǎn)比程序員來(lái)選擇有效的多。不過(guò),寄存器存儲(chǔ)類型還是可以為優(yōu)化器提供重要的參考。
相關(guān)推薦:計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言教程匯總計(jì)算機(jī)等級(jí)考試二級(jí)C語(yǔ)言常見(jiàn)知識(shí)點(diǎn)總結(jié)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |