关键字static可以用来定义数据和函数:static data-definition; static function-definition;
static 表明一个函数或者数据元素仅在当前的编译域里是可见的。另外,如果你用static关键字修饰函数中的局部变量,
函数中用static关键字修饰的变量, 可以在连续的调用函数时, 保存上一次变量的值。因此在程序中遇到它时才执行初始化。
static(和 global)变量是在编译时被初始化的,
请注意,自动变量和静态变量的初始化是完全不同的。自动变量(默认局
部变量是自动变量,除非你显式的使用static关键字)是在运行时初始化的,因此初始值会被简单的嵌入在可执行文件里面。如果
你修改了他们,他们将会改变,并保存在文件里。默认的C语言预处理器将会把未初始化的静态变量初始化为0,但是,如果你编
译的程序处于"nostub"模式,由于一些编译器限制,你必须显式的初始化所有的静态变量和全局变量。
事实上,全局和静态变量在编译时被初始化并且保存在可执行文件里有个很严重的后果,在像PC,Mac等电脑上, 这是
不存在的“标准”,换句话说,当每次启动程序时,那些电脑经常从存储设备(磁盘)上重新加载可执行程序,但是这在某些硬件上
是不同的。 因此,如果你有如下的全局(或者静态)变量: int a = 10; 并且如果你想在程序的某处把它的值改成20(举个例子),
在下一次程序启动时,它的初始值将是20(而不是10)!
注意, 这只是对全局的静态变量成立。为了强制重新初始化,你必须像这样 :a = 10;
显式地在主程序开始放些东西!
但是请注意,如果程序被归档,初始值将在你每次运行程序时被恢复,因为归档的程序在每次启动时都会被从归档内存到RAM重新加载,
这很像“标准”电脑上每次启动他们时,程序都会从磁盘上被重新加载。