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不必定成立,所以编译器会完整编译。

相关文章
相关标签/搜索