在C、C++、Java等语言中,都有
static关键字,作为一个英语单词来讲,这个词的基本含义是“静态的、固定的”。顾名思义,这个词是用来声明静态对象的。
1、C语言中的 static
C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数。而内部变量是指定义在函数内部的函数参数及变量。外部变量定义在函数之外,因此可以在许多函数中使用。由于C语言不允许在一个函数中定义其它函数,因此函数本身只能是“外部的”。
由于C语言代码是以文件为单位来组织的,在一个源程序所有源文件中,一个外部变量或函数只能在某个文件中定义一次,而其它文件可以通过 extern声明来访问它(定义外部变量或函数的源文件中也可以包含对该外部变量的 extern声明)。
而 static则可以限定变量或函数为静态存储。如果用 static限定外部变量与函数,则可以将该对象的作用域限定为被编译源文件的剩余部分。通过 static限定外部对象,可以达到隐藏外部对象的目的。因而, static限定的变量或函数不会和同一程序中其它文件中同名的相冲突。如果用 static限定内部变量,则该变量从程序一开始就拥有内存,不会随其所在函数的调用和退出而分配和消失。[1]
2、C++中的 static
由于C++基本上兼容C语言的特性,为了区别,将C中继承过来的 static用法称为文件静态(file static)。C++不赞成文件静态,已经用未命名的命名空间代替它。
参考:
[1] Brian W. Kernighan, Dennis M. Ritchie.(徐宝文,李志 译,尤晋元 校) C程序设计语言(第二版·新版)。
[2] Stanley B. Lippman, Josee Lajoie, Barbara E. Moo. (李师贤 蒋爱军 李晓勇 林瑛 译)C++ Primer中文版。
1、C语言中的 static
C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数。而内部变量是指定义在函数内部的函数参数及变量。外部变量定义在函数之外,因此可以在许多函数中使用。由于C语言不允许在一个函数中定义其它函数,因此函数本身只能是“外部的”。
由于C语言代码是以文件为单位来组织的,在一个源程序所有源文件中,一个外部变量或函数只能在某个文件中定义一次,而其它文件可以通过 extern声明来访问它(定义外部变量或函数的源文件中也可以包含对该外部变量的 extern声明)。
而 static则可以限定变量或函数为静态存储。如果用 static限定外部变量与函数,则可以将该对象的作用域限定为被编译源文件的剩余部分。通过 static限定外部对象,可以达到隐藏外部对象的目的。因而, static限定的变量或函数不会和同一程序中其它文件中同名的相冲突。如果用 static限定内部变量,则该变量从程序一开始就拥有内存,不会随其所在函数的调用和退出而分配和消失。[1]
2、C++中的 static
由于C++基本上兼容C语言的特性,为了区别,将C中继承过来的 static用法称为文件静态(file static)。C++不赞成文件静态,已经用未命名的命名空间代替它。
参考:
[1] Brian W. Kernighan, Dennis M. Ritchie.(徐宝文,李志 译,尤晋元 校) C程序设计语言(第二版·新版)。
[2] Stanley B. Lippman, Josee Lajoie, Barbara E. Moo. (李师贤 蒋爱军 李晓勇 林瑛 译)C++ Primer中文版。