static 修饰变量表示此变量是静态的,不会随函数释放而释放,存储在堆区。修饰函数表示函数只在此文件中有效。
extern 修饰变量表示此变量来源于其他文件定义的,此文件需要用到,用于全局变量。函数不加static一般隐含extern。
extern 关键字用来告诉编译器当前修饰的内容在其他地方定义,让链接器链接的时候将原始位置的定义链接进来。
static 我更喜欢网上的一种说法:透明化修饰内容,可以这样理解,被static修饰的局部变量生命周期会到程序结束,而被static修饰的函数则起到了封装的特性,不被外界使用
两者的意义完全不同。
extern 用来修饰外部变量,告知编译器 这个变量的位置在其他文件中
static 用来修饰静态变量或者函数,使变量和函数 都只能在本文件中可见、可使用。
extern的作用是,如果你想在源文件B中用源文件A的函数或者变量就加extern
static指静态变量,意思是每次调用后这个值是保持不变的