全局变量的使用使得软件更加难以阅读和理解。因为程序中任何地方的代码都可能随时修改这个变量的值,于是理解这个变量可能就意味着要理解整个程序的很大部分。
某些语言(比如 Java)中没有全局变量。Java 中,所有非局部变量都是类的字段,于是所有变量就都在类和方法的作用域中了。
需要指出的是,C语言不存在真正意义上的“全局变量”。被习惯性误称为“全局变量”的,一般是文件作用域对象。ANSI C/ISO C也没有这种提法。C语言中所谓“全局变量”的例子:
/* 注意这个例子是有问题的。
global 并不是全局变量,因为它并不是“所有作用域均可见”。
global 是C语言中的文件作用域变量,作用域从声明开始一直到文件末尾。*/
#include
int global = 3; /* 这是“全局变量” */
static void ChangeGlobal(void)
{
global = 5; /* 从函数中引用“全局变量” */
}
int main(void)
{
printf("%d\n", global); /* 还是从函数中引用...