C語言/C++編程嵌入式基礎(chǔ)學(xué)習(xí)之volatile關(guān)鍵字

C語言是面向過程的,而C++是面向?qū)ο蟮? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? C和C++的區(qū)別:

C是一個(gè)結(jié)構(gòu)化語言,它的重點(diǎn)在于算法和數(shù)據(jù)結(jié)構(gòu)。C程序的設(shè)計(jì)首要考慮的是如何通過一個(gè)過程,對(duì)輸入(或環(huán)境條件)進(jìn)行運(yùn)算處理得到輸出(或?qū)崿F(xiàn)過程(事務(wù))控制)。

C++,首要考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠契合與之對(duì)應(yīng)的問題域,這樣就可以通過獲取對(duì)象的狀態(tài)信息得到輸出或?qū)崿F(xiàn)過程(事務(wù))控制。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”。

C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣。之所以說C++比C更先進(jìn),是因?yàn)椤?設(shè)計(jì)這個(gè)概念已經(jīng)被融入到C++之中 ”,而就語言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯(cuò)!算法是程序設(shè)計(jì)的基礎(chǔ),好的設(shè)計(jì)如果沒有好的算法,一樣不行。而且,“C加上好的設(shè)計(jì)”也能寫出非常好的東西。

volatile的意思是”易變的”,用于修飾變量的一個(gè)關(guān)鍵字,表示該變量在很多地方都能被改變,會(huì)被意象不到的改變,編譯器不能對(duì)其優(yōu)化,往往用于多任務(wù)系統(tǒng)或嵌入式系統(tǒng)中,

情況一:嵌入式系統(tǒng)中的很多外設(shè)寄存器的值會(huì)實(shí)時(shí)改變,如下所示,為Microchip單片機(jī)的頭文件,可以發(fā)現(xiàn)所有的變量都是volatile關(guān)鍵字定義的。

volatile圖

情況二:嵌入式系統(tǒng)內(nèi)存中的某些變量有可能被中斷程序修改;

情況三:多任務(wù)系統(tǒng)中的共享變量可能隨時(shí)改變。滿足這些特點(diǎn)之一的變量必須要用volatile修飾,保證編譯器不能對(duì)其優(yōu)化處理,如果被優(yōu)化,往往程序的執(zhí)行結(jié)果出錯(cuò)。

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

例如:

int square(volatile int *ptr)

{

return *ptr * *ptr;

}

//編譯器優(yōu)化完的代碼:

int square(volatile int *ptr)

{

int a = *ptr;

int b = *ptr;

return a*b;

}

//正確代碼:由于*ptr的值隨時(shí)可能改變,故優(yōu)化代碼中的a和b的值可能不一樣,故計(jì)

int square(volatile int *ptr) //算的結(jié)果可能有誤

{

int a = *ptr;

return a*a;

}

小編推薦一個(gè)學(xué)C語言/C++的學(xué)習(xí)裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享!

總結(jié):

volatile主要用在嵌入式系統(tǒng)中;

volatile關(guān)鍵字可理解為“編譯器警告指示字” ;

volatile關(guān)鍵字用于告訴編譯器必須每次去內(nèi)存中取變量的值;

volatile主要用來修飾可能被多個(gè)線程訪問的變量;

volatile也可用來修飾可能被未知因素修改的變量。

這些是C/C++能做的

服務(wù)器開發(fā)工程師、人工智能、云計(jì)算工程師、信息安全(黑客反黑客)、大數(shù)據(jù) 、數(shù)據(jù)平臺(tái)、嵌入式工程師、流媒體服務(wù)器、數(shù)據(jù)控解、圖像處理、音頻視頻開發(fā)工程師、游戲服務(wù)器、分布式系統(tǒng)、游戲輔助等

、
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容