Possible Duplicate:
What does “static” mean in a C program?
在C语言中,static关键字是什么意思?
我使用的是ansi-c。我在一些代码示例中见过,它们在变量前面和函数前面使用static关键字。与变量一起使用的目的是什么?使用函数的目的是什么?
- 我有,但很难理解确切的目的。我对变量的使用知之甚少。但是与函数一起使用?
- 你找到这个了吗:stackoverflow.com/questions/572547/…
- …或者这个:stackoverflow.com/questions/943280/…
简单来说,定义变量时,static关键字有两种用法:
1-文件作用域中定义的变量,使用static关键字,即定义的外部函数只在该文件中可见。任何从其他文件访问它们的尝试都将导致链接时无法解析的符号。
2-在一个函数内的一个块内定义为static的变量将在同一代码块的不同调用中保持或"生存"。如果它们被定义为初始化,那么它们只被初始化一次。默认情况下,static变量通常保证初始化为0。
- 关于1:静态也可以应用于功能,也可以将它们隐藏在外部。
- 在这个问题的其他化身中也有这样的说法,但是对于来自谷歌的人来说,严格来说1适用于编译单元而不是文件。
- @roux hass:"如果它们被定义为初始化的",这意味着什么?定义时是否用非零值初始化?
函数体中的static,即用作变量存储分类器,使该变量在函数调用之间保留其值——可以说,函数中的静态变量是仅对该函数可见的全局变量。这种使用static的方式总是使它在线程中使用的函数不安全,您应该避免使用它。
另一个用例是在全局范围内使用static,即全局变量和函数:静态函数和全局变量是编译单元的本地变量,即它们不显示在编译的二进制对象的导出表中。因此,它们不会污染名称空间。声明静态的所有函数和全局变量都不能从编译单元(即C文件)外部访问是一个好主意!请注意,静态变量不能放在头文件中(除了极少数的特殊情况)。