国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

c語言volatile的作用 C語言中volatile關(guān)鍵字的用法是什么?

C語言中volatile關(guān)鍵字的用法是什么?Volatile提醒編譯器,它后面定義的變量隨時可能發(fā)生變化,因此每次編譯的程序需要存儲或讀取變量時,它都會告訴編譯器直接從變量內(nèi)存地址讀取數(shù)據(jù),而不必優(yōu)化

C語言中volatile關(guān)鍵字的用法是什么?

Volatile提醒編譯器,它后面定義的變量隨時可能發(fā)生變化,因此每次編譯的程序需要存儲或讀取變量時,它都會告訴編譯器直接從變量內(nèi)存地址讀取數(shù)據(jù),而不必優(yōu)化變量,從而提供對特殊地址的穩(wěn)定訪問。。如果沒有volatile關(guān)鍵字,編譯器可以優(yōu)化讀取和存儲,并且可以臨時使用寄存器中的值。如果此變量由另一個程序更新,則會出現(xiàn)不一致。

代碼示例:

int square(volatile int*PTR)

]{

int a,b

a=*PTR

b=*PTR

返回a*b

}

由于*PTR的值可能會意外更改,因此a和b可能不同。因此,此代碼可能不是您期望的正方形!正確的代碼如下:

long square(volatile int*PTR)

{

int a

a=*PTR

return a*a

}

]注意:頻繁使用volatile可能會增加代碼大小,降低性能,所以合理使用volatile。

C語言中volatile修飾符的作用是什么?

Volatile告訴編譯器每次使用變量時都要從內(nèi)存中重新讀取它。例如:單片機中寄存器的定義通常需要用volatile修改,因為寄存器的值會被硬件修改。還有一些全局變量可以被中斷服務(wù)程序修改。例如,如果a=1b=a未定義為volatile,編譯器通常會將其優(yōu)化為a=1b=1。如果中斷服務(wù)程序在執(zhí)行第一句話之后將a改為2,那么優(yōu)化程序中B的值不會改變,這不是我們想要的。在a的語句中添加volatile可以解決這個問題。