天天看點

c語言的常用關鍵字,C語言程式設計技巧——常用關鍵字

C語言中包含一些常見的關鍵字,而這類關鍵字對于整個程式的效率等都會造成一定的影響,是以在C語言程式設計中需要重點注意。

一、volatile關鍵字

volatile影響編譯器編譯的結果,告訴編譯器volatile變量是随時可能發生變化的。進而每次都必須從該變量的位址中讀取值,而不是直接從寄存器中讀取,可以保證特殊位址的穩定通路,不會出錯。

主要應用場合:

1、并行裝置的硬體寄存器,通路時值已經被其他裝置修改,但寄存器中依然是舊值。

2、一個中斷服務子程式中會通路的非自動變量

3、多線程應用中被幾個任務共享的變量。

主要作用:

1、告訴編譯器對此變量不能做任何優化

2、表示用volatile定義的變量會在程式外被改變,每次必須從記憶體中讀取,而不能将其放在cache或寄存器中重複使用。

二、register關鍵字

register關鍵字請求編譯器盡可能将變量存在CPU内部寄存器中,而不通過記憶體尋址通路,提高效率。

register修飾符通常用于被頻繁使用的變量,可以大大加快存儲速度。

注意:

1、register變量必須是能被CPU所接受的類型,變量必須是一個單個的值,且長度應小于或等于整型的長度。

2、register變量可能不存放在記憶體中,不能用&來擷取register變量的位址。

三、static關鍵字

static關鍵字的主要作用:

1、修飾變量

對于用static修飾的變量分為全局變量和局部變量,這些變量存在記憶體的靜态區。使用static聲明的全局變量,隻能被目前檔案中的代碼調用,且是定義在該定義之後的代碼,外部檔案即使使用了extern關鍵字聲明也是不能夠使用的,其準确的作用域在從定義處到該檔案結束。

使用static聲明的局部變量,在函數體内部聲明的局部變量隻能在這個函數體内部使用,不能再其他地方使用,由于有static關鍵聲明,是以在函數結束時,這個靜态變量的值并不會被銷毀,在下次調用時又能繼續調用,合理使用此關鍵字可以實作一些比較有用的功能,比如在函數内部用于統計此函數的調用次數之類的功能。

2、修飾函數

函數前加static使得函數成為靜态函數。此處static的含義不是指存儲方式,而是指函數的作用域僅局限于本檔案,又稱為内部函數,其他檔案中無法得到調用。内部函數的好處是:不同人編寫的不同函數時,不用擔心自己定義的函數會在其他檔案中的函數同名。

四、const關鍵字

const準确的說應該是一個隻讀的變量,其值在編譯時不能被使用,修飾的隻讀變量。被const修飾的隻讀變量必須在定義的同時初始化。

且在C語言中,其不能被用于初始化一個數組,因為const定義的也是一個變量,隻不過是一個隻讀變量而已。

編譯器通常不為普通const隻讀變量配置設定存儲空間,而是将他們儲存在符号表中,使得其成為一個編譯期間的值,沒有了存儲與讀記憶體的操作,使得它效率也很高。

const定義的隻讀變量從彙編的角度來看,隻是給出了對應的記憶體位址,而不是像define一樣給出的是一個立即數。const定義的隻讀變量在程式運作過程中隻有一份拷貝,存放在靜态區。

使用示例:

const修飾數組:定義或說明一個隻讀數組 int const a[]={};const int a[]={};

const修飾指針:

const int *p; //p可變,p指向的對象不可變

int const *p; //p可變,p指向的對象不可變

int * const p; //p不可變,p指向的對象可變

const int * const p; //p和p指向的對象都不可變

const修飾函數的參數:const修飾符修飾函數的參數時,告訴該參數在函數體中不能改變,防止了使用者的一些無意的或錯誤的修改。

const修飾函數的傳回值:傳回值不可被改變。