c語言 const和volatile的區(qū)別?
const和volatile的區(qū)別?Const指定此變量不能在我們的程序代碼中更改,但我們不能保證此值會由于硬件原因而更改。Volatile關(guān)鍵字表示編譯器執(zhí)行強制I/O尋址,而不是讀取寄存器的值。一
const和volatile的區(qū)別?
Const指定此變量不能在我們的程序代碼中更改,但我們不能保證此值會由于硬件原因而更改。Volatile關(guān)鍵字表示編譯器執(zhí)行強制I/O尋址,而不是讀取寄存器的值。一般來說,對于連續(xù)變量,編譯器將首先讀取數(shù)據(jù)并將其保存到寄存器中。使用時直接讀取寄存器中的數(shù)據(jù),加快了處理速度。但是,有時,如實時讀取鍵值或其他需要實時讀取的數(shù)據(jù),它不能使用寄存器,而必須使用易失性開關(guān),否則關(guān)鍵字就不見了。所以有時const和volatile可以一起使用。
以下關(guān)于const和volatile說法,正確的有哪些?
我的理解是:
const由編譯器優(yōu)化并成為常量。
volatile的功能是告訴編譯器不要優(yōu)化變量(不要直接使用CPU緩存值,而是直接使用內(nèi)存值)
const volatile是告訴編譯器變量沒有優(yōu)化(它沒有優(yōu)化為常量或變量,這是從內(nèi)存中獲取的)
一個參數(shù)可以既是volatile又是const的么?
volatile修飾符告訴編譯器變量的值可以用程序未顯式指定的任何方式更改。最常見的例子是外部端口的值,在程序中不需要任何賦值語句就可以更改它。這種變量你可以用volatile修改它,complier不會優(yōu)化它。 const修改的變量不能在程序內(nèi)部修改,但可以在程序外部修改,就像上面提到的外部端口的值一樣。如果您只使用const,編譯器可能會優(yōu)化這些變量,volatile將是安全的。
一個參數(shù)既可以是const還可以是volatile嗎?
你好,我是天上的星星。我很高興為你回答。當(dāng)然。例如,只讀狀態(tài)寄存器。Const指定變量不能在我們的程序代碼中更改,但是我們不能保證值會由于硬件原因在代碼之外更改。Volatile意味著我們的代碼將同時更新并使用最新的值。比較專業(yè)的理科知識,歡迎關(guān)注我。如果你喜歡我的回答,也請給我表揚或轉(zhuǎn)發(fā),你的鼓勵是支持我寫下來的動力,謝謝。