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;