ANSI-C中的静态意味着什么

Sen*_*ncy 33 c static keyword ansi-c

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

static关键字在C 中的含义是什么?

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

Rou*_*ass 57

正如一个简短的回答,static关键字在定义变量时有两种用法:

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

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

  • 关于1:静态也可以应用于功能,也可以将它们隐藏到外部. (8认同)
  • 在这个问题的其他化身中已经说过,但对于那些来自谷歌的人来说,严格来说1适用于编译单元而不是文件. (7认同)

dat*_*olf 32

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

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