面试被问到了,我稍微总结记录一下。
主要是static和extern全局变量的区别
1.extern可以使变量在不同文件共享;
static限制了变量的作用域,只能在本文件使用。
extern和static不能同时修饰一个变量
2.extern是声明变量,最好是在头文件中做声明;
static是定义变量,一般定义static全局变量时,都把它放在原cpp文件中而不是头文件。
3.全局函数声明默认是extern。
4.函数或变量可以声明多次,但定义只能有一次。
5.如果使用extern在头文件中定义变量,包含此头文件的多个文件编译连接时,会出现该变量被定义多次,因而出错;
如果使用static在头文件中定义变量,包含此头文件的多个文件编译连接时,不会出现重定义错误,每个编译单元都会有一个独立的属于该变量的存储空间,但由此会对其他编译单元造成不必要的信息污染。