新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > C語言中auto register static const volatile 區(qū)別

C語言中auto register static const volatile 區(qū)別

作者: 時(shí)間:2013-05-13 來源:網(wǎng)絡(luò) 收藏

3>const成員函數(shù)的聲明中,const只能放在函數(shù)聲明的尾部,表示該類成員不修改對(duì)象.

說明:

const type m; //修飾m為不可改變

示例:

typedef char * pStr; //新的類型pStr;

char string[4] = "abc";

const char *p1 = string;

p1++; //正確,上邊修飾的是*p1,p1可變

const pStr p2 = string;

p2++; //錯(cuò)誤,上邊修飾的是p2,p2不可變,*p2可變

同理,const修飾指針時(shí)用此原則判斷就不會(huì)混淆了。

const int *value; //*value不可變,value可變

int* const value; //value不可變,*value可變

const (int *) value; //(int *)是一種type,value不可變,*value可變

//邏輯上這樣理解,編譯不能通過,需要tydef int* NewType;

const int* const value;//*value,value都不可變

(5)volatile

表明某個(gè)變量的值可能在外部被改變,優(yōu)化器在用到這個(gè)變量時(shí)必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保存在寄存器里的備份。它可以適用于基礎(chǔ)類型如:int,char,long......也適用于C的結(jié)構(gòu)和C++的類。當(dāng)對(duì)結(jié)構(gòu)或者類對(duì)象使用volatile修飾的時(shí)候,結(jié)構(gòu)或者類的所有成員都會(huì)被視為volatile.

在多線程環(huán)境下經(jīng)常使用,因?yàn)樵诰帉懚嗑€程的程序時(shí),同一個(gè)變量可能被多個(gè)線程修改,而程序通過該變量同步各個(gè)線程。

簡單示例:

DWORD __stdcall threadFunc(LPVOID signal)

{

int* intSignal=reinterpret_cast(signal);

*intSignal=2;

while(*intSignal!=1)

sleep(1000);

return 0;

}

該線程啟動(dòng)時(shí)將intSignal 置為2,然后循環(huán)等待直到intSignal 為1 時(shí)退出。顯然intSignal的值必須在外部被改變,否則該線程不會(huì)退出。但是實(shí)際運(yùn)行的時(shí)候該線程卻不會(huì)退出,即使在外部將它的值改為1,看一下對(duì)應(yīng)的偽匯編代碼就明白了:

mov ax,signal

label:

if(ax!=1)

goto label

對(duì)于C來說,它并不知道這個(gè)值會(huì)被其他線程修改。自然就把它c(diǎn)ache在寄存器里面。C 是沒有線程概念的,這時(shí)候就需要用到volatile。volatile 的本意是指:這個(gè)值可能會(huì)在當(dāng)前線程外部被改變。也就是說,我們要在threadFunc中的intSignal前面加上volatile,這時(shí)候,知道該變量的值會(huì)在外部改變,因此每次訪問該變量時(shí)會(huì)重新讀取,所作的循環(huán)變?yōu)槿缦旅鎮(zhèn)未a所示:

label:

mov ax,signal

if(ax!=1)

goto label

注意:一個(gè)參數(shù)既可以是const同時(shí)是volatile,是volatile因?yàn)樗赡鼙灰庀氩坏降馗淖儭K莄onst因?yàn)槌绦虿粦?yīng)該試圖去修改它。

(6)extern

extern 意為“外來的”···它的作用在于告訴編譯器:有這個(gè)變量,它可能不存在當(dāng)前的文件中,但它肯定要存在于工程中的某一個(gè)源文件中或者一個(gè)Dll的輸出中。

c語言相關(guān)文章:c語言教程



上一頁 1 2 下一頁

關(guān)鍵詞: C語言 關(guān)鍵字 編譯器

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉