【嵌入式Linux驅動開發】C語言知識(彙總版)

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循環儘量都加上大花括號!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章