static
- static全局變量與普通的全局變量區別:
- static全局變量作用域僅僅是本文件,而全局變量可以在其他源文件通過extern引用!
- static局部變量和普通局部變量區別:
- static局部變量只被初始化一次,下一次依據上一次結果值;
- static函數與普通函數區別:
- static函數作用域僅僅是本文件,而不帶static函數可以在其他源文件通過extern引用!
volatile
- ①、編譯器很聰明,會幫我們做些優化,比如:
int a;
a = 0; // 這句話可以優化掉,不影響 a 的結果
a = 1;
- ② 有時候編譯器會自作聰明,比如:
int *p = ioremap(xxxx, 4); // GPIO 寄存器的地址
*p = 0; // 點燈,但是這句話被優化掉了
*p = 1; // 滅燈
- ③ 對於上面的情況,爲了避免編譯器自動優化,需要加上 volatile,告訴它“這是容易出錯
的,別亂優化”:
volatile int *p = ioremap(xxxx, 4); // GPIO 寄存器的地址
*p = 0; // 點燈,這句話不會被優化掉
*p = 1; // 滅燈
- 關於volatile更多詳細介紹,可參考這裏
其他
- 遇上for循環儘量都加上大花括號!