C語言之extern、const、volatile

extern:函數

  extern修飾變量,聲明該變量爲外部文件的全局變量。若使用外部全局變量,必須用extern聲明。優化

  extern修飾函數,聲明該函數爲外部函數。extern修飾的函數形參必須與原函數一致,不然可能致使傳參出錯,且編譯器不會報警。建議聲明外部函數省略掉extern。操作系統

 

const:線程

  定義常量,即用const聲明的變量值不能被修改。指針

  const char* p, char const* p, char* const p的區別:編譯器

    C語言中const不能修飾*,所以const char* pchar const* p等價,均表示定義一個指向字符常量的指針,即*p爲常量,*p不能被修改。編譯

    而char* const p表示定義一個指向字符的常量指針,即p爲常量,不能被修改,*p能夠改變。變量

 

volatile:硬件

  volatile修飾的變量表示能夠被某些編譯器未知的因素更改,好比操做系統、硬件或者其餘線程等,遇到volatile聲明的變量,編譯器對訪問該變量的代碼再也不進行優化,從而能夠提供對特殊地址的穩定訪問。語言

  例如:int i=1;if(i>0)...else... 編譯器會認爲在if判斷前i賦值爲1,i>0恆成立,所以編譯器會優化掉else的語句以節省空間。

     volatile int i=1;if(i>0)...else... volatile告知編譯器變量i可能被未知因素更改,i>0不必定成立,所以編譯器會完整編譯。

相關文章
相關標籤/搜索