34

可能重复:
C 程序中的“静态”是什么意思?

staticC 中的关键字是什么意思?

我正在使用 ANSI-C。我在几个代码示例中看到过,它们static在变量前面和函数前面都使用了关键字。使用变量的目的是什么?使用函数的目的是什么?

4

2 回答 2

58

简单回答一下,static定义变量时关键字有两种用法:

1- 在文件范围内使用static关键字定义的变量,定义的外部函数将仅在该文件中可见。任何从其他文件访问它们的尝试都将导致在链接时出现未解析的符号。

2-定义为static函数块内的变量将在同一代码块的不同调用中持续或“存活”。如果它们被定义为初始化,那么它们只被初始化一次。static变量通常保证0默认初始化为。

于 2011-01-02T01:16:33.260 回答
34

static在函数体内,即用作变量存储分类器,使该变量在函数调用之间保留其值——可以说,函数内的静态变量是仅对该函数可见的全局变量。这种使用static总是使得它在线程中使用的函数不安全,你应该避免它。

另一个用例是static在全局范围内使用,即用于全局变量和函数:静态函数和全局变量对于编译单元来说是本地的,即它们不会出现在编译后的二进制对象的导出表中。因此它们不会污染命名空间。将所有函数和全局变量声明为不能从相关编译单元(即 C 文件)外部访问是个好主意!请注意,不能将静态变量放在头文件中(除了非常罕见的特殊情况)。

于 2011-01-02T01:13:50.153 回答