今天偶然看到一篇,关于C++ 中static ,extern的介绍文章。虽说写的有点杂乱了,没太看明白。不过,中间有几点,让我对static extern 有了些新认识。
1、全局变量
全局变量理论上是指应用程序级别的全局。普通的全局变量是面向整个程序的,当各个文件各自编译,然后链接成一个可执行程序之后,全局变量的确是被所有文件中的“看到的”。
但是,如果想让别的文件在程序里能够被看到。(如果直接包含使用另外一个文件中定义的变量,那将通不过编译)。
这里全局变量,我常用的就是定义一个publicdef.h 专门用extern 来修饰 声明全局变量,之后调用全局变量就只需包含publicdef.h文件即可。而全局变量的真正定义和初始化则放在publicdef.cpp文件中。
2、静态全局变量
加上static修饰之后的全局变量,变成了静态全局,作用域仅在此文件里头。
如果你在这个文件中定义的全局变量不打算给别人用,那么你就将它定义为static全局变量吧!因为这样你不必担心其他文件也定义了一个同名变量,在连接的时候出现重定义。
相反,如果你的全局变量是打算给其他文件使用的,那么就不要加上static,因为这样在其他文件中可以使用extern对该定义进行引用。
这么说来,static 和extern是不能同时用来修饰一个变量的,extern修饰表示该变量只是声明,声明它使用了其他文件的变量定义,static的修饰表示我这个变量(自己定义的),只能被当前文件访问。两者完全冲突,所以编译器会报错——‘n’的声明中有相互冲突的限定符。
另外,extern 的两个用法,第一个是如上所说,通知编译器,此变量在其他文件中有定义。第二个是,extern c { }; 按照C的方式进行编译。