static关键字的作用:
1:在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放;
2:static修饰全局变量的时候,这个全局变量只能在本文件中被访问,不能再其他文件中访问,即便是extern声明也不行;
3:static修饰一个函数,则这个函数只能在本文件中被调用,不能被其他文件调用。
const关键字的作用:
1:const是constant(永恒的,始终如一)的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据只可以被访问,而不可以被修改,意味着const"只读"(readonly);
2:const修饰一个变量,一定要给这个变量初始化值,若不初始化,后面就无法初始化;
3:具体作用:给读代码的人传递有用信息,声明一个常数为常量是为了告诉用户这个参数的应用目的;
4:通过给优化器一些附加信息,使关键字const也许能产生更加紧凑的代码;
5:合理使用关键字const可以使编译器保护那些不希望被修改的参数,防止无意代码的修改,可以减少bug的出现。
extern关键字作用:
1:在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。extern声明不是定义,即不分配存储空间;
2:extern 是指当前变量或函数不是本源文件内声明的,它是外部变量和外部函数,正所谓“外来的和尚会念经”,能够很好的体现extern的价值。当我们在本文件中试图引用一个外部声明的全局变量或者函数的时候,可以在其前面加上extern,表示它是外来的“和尚” ;
1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定义了。
eg:extern inti; //声明,不是定义
inti; //声明,也是定义
2.如果声明有初始化式,就被当作定义,即使前面加了extern。只有当extern声明位于函数外部时,才可以被初始化。
eg:externdouble pi=3.1416; //定义
3.函数的声明和定义区别比较简单,带有{}的就是定义,否则就是声明。
eg:externdouble max(double d1,double d2); //声明
doublemax(double d1,double d2){}//定义
4.除非有extern关键字,否则都是变量的定义。
eg:extern inti; //声明
inti; //定义