當前位置:
首頁 > 最新 > C語言/C加加編程嵌入式基礎學習之volatile關鍵字

C語言/C加加編程嵌入式基礎學習之volatile關鍵字

C語言是面向過程的,而C++是面向對象的

C和C++的區別:

C是一個結構化語言,它的重點在於演算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)。

C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程(事務)控制。 所以C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為「 設計這個概念已經被融入到C++之中 」。

volatile的意思是」易變的」,用於修飾變數的一個關鍵字,表示該變數在很多地方都能被改變,會被意象不到的改變,編譯器不能對其優化,往往用於多任務系統或嵌入式系統中,

情況一:嵌入式系統中的很多外設寄存器的值會實時改變,如下所示,為Microchip單片機的頭文件,可以發現所有的變數都是volatile關鍵字定義的。

volatile圖

情況二:嵌入式系統內存中的某些變數有可能被中斷程序修改;

情況三:多任務系統中的共享變數可能隨時改變。滿足這些特點之一的變數必須要用volatile修飾,保證編譯器不能對其優化處理,如果被優化,往往程序的執行結果出錯。

小編推薦一個學C語言/C++的學習裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多乾貨和技術資料分享!

例如:

int square(volatile int *ptr)

{

return *ptr * *ptr;

}

//編譯器優化完的代碼:

int square(volatile int *ptr)

{

int a = *ptr;

int b = *ptr;

return a*b;

}

//正確代碼:由於*ptr的值隨時可能改變,故優化代碼中的a和b的值可能不一樣,故計

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

{

int a = *ptr;

return a*a;

}

小編推薦一個學C語言/C++的學習裙【 六九九,四七零,五九六 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發工具,很多乾貨和技術資料分享!

總結:

volatile主要用在嵌入式系統中;

volatile關鍵字可理解為「編譯器警告指示字」 ;

volatile關鍵字用於告訴編譯器必須每次去內存中取變數的值;

volatile主要用來修飾可能被多個線程訪問的變數;

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

這些是C/C++能做的

伺服器開發工程師、人工智慧、雲計算工程師、信息安全(黑客反黑客)、大數據 、數據平台、嵌入式工程師、流媒體伺服器、數據控解、圖像處理、音頻視頻開發工程師、遊戲伺服器、分散式系統、遊戲輔助等


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 小辰帶你學知識 的精彩文章:

C語言/C加加編程學習,怎樣判斷某一文件是否存在

TAG:小辰帶你學知識 |