可能是重复问题:
C语言中的static
关键字是什么意思?
C语言中的static
关键字是什么意思?
我在使用ANSI-C时看到过几个代码示例,它们在变量前面和函数前面都使用了static
关键字。在变量的情况下使用的目的是什么?在函数的情况下使用的目的又是什么?
可能是重复问题:
C语言中的static
关键字是什么意思?
C语言中的static
关键字是什么意思?
我在使用ANSI-C时看到过几个代码示例,它们在变量前面和函数前面都使用了static
关键字。在变量的情况下使用的目的是什么?在函数的情况下使用的目的又是什么?
简单来说,当定义变量时使用 static
关键字有两种用法:
1- 在文件作用域内定义带有 static
关键字的变量,即在函数外部定义,这些变量只能在该文件内部使用。任何尝试从其他文件访问它们的行为都将导致链接时未解决的符号错误。
2- 在函数内部的块中定义为 static
的变量可以跨越不同的代码块调用而存在或“生存”。如果变量被初始化,那么它们只会被初始化一次。通常情况下,static
变量保证默认初始化为 0
。
static
作为变量存储分类符,使该变量在函数调用之间保留其值。可以说,函数内的静态变量是全局变量,但仅对该函数可见。这种使用static
总是使得它所在的函数不安全,因此应避免使用。static
,即用于全局变量和函数:静态函数和全局变量在编译单元中是局部的,即它们不会出现在编译二进制对象的导出表中。因此,它们不会污染命名空间。在问题的C文件之外声明所有函数和全局变量为静态,以使其不可从外部访问,是一个好主意!只要注意静态变量不能放在标头文件中(除非是很少见的特殊情况)。