volatile 等C++中固有的不可移植特性

1. volatile 關鍵字

用volatile關鍵字定義變量,相當於告訴編譯器,這個變量的值會隨時發生變化,每次使用時都需要去內存裏重新讀取它的值,並不要隨意針對它作優化。

不使用volatile定義的變量,可能因爲編譯器優化而出現一些問題。

例如:
volatile int i=10;
int j = i;
...
int k = i;

volatile 告訴編譯器i是隨時可能發生變化的,每次使用它的時候必須從i的地址中讀取,因而編譯器生成的可執行碼會重新
從i的地址讀取數據放在k中。

而優化做法是,由於編譯器發現兩次從i讀數據的代碼之間的代碼沒有對i進行過操作,它會自動把上次讀的數據放在k中。
而不是重新從i裏面讀。這樣以來,如果i是一個寄存器變量或者表示一個端口數據就容易出錯,所以說volatile可以保證
對特殊地址的穩定訪問,不會出錯。


建議使用volatile變量的場所:
(1) 並行設備的硬件寄存器
(2) 一箇中斷服務子程序中會訪問到的非自動變量(全局變量)
(3) 多線程應用中被幾個任務共享的變量

2. 鏈接指示
extern "C"

c++使用鏈接指示指出任意非C++函數所用的語言

有時需要在C和C++中編譯同一源文件,當編譯C++時,自動定義預處理器名字__cplusplus(兩個下劃線)
#ifdef __cplusplus
extern "C"
#end if


3.位域
typedef unsigned int Bit;

Bit mode:2;
Bit modify:1;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章