有区别的,而且和链接器(linker)有关。未加static的变量可以被其他的编译单元访问,也就是说,链接器可以让其他的目标文件访问这个变量。但是如果加了static,那么这个变量就变成该编译单元的局部变量了,其他编译单元不可以通过链接器访问到该变量。
的确,定义全局变量就可以实现变量在文件中的共享,但定义静态全局变量还有以下好处: 静态全局变量不能被其它文件所用; 其它文件中可以定义相同名字的变量,不会发生冲突; 您可以将上述示例代码改为如下: //Example 2//File1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){ n=20; cout<<n<<endl; fn();}//File2#include <iostream.h>extern int n;void fn(){ n++; cout<<n<<endl;} 编译并运行Example 2,您就会发现上述代码可以分别通过编译,但运行时出现错误。 试着将 static int n; //定义静态全局变量 改为 int n; //定义全局变量 再次编译运行程序,细心体会全局变量和静态全局变量的区别。