在C中“static”是什么意思?

我在C代码中看到了在不同的地方使用的单词static;这是否类似于C#(实现在对象之间共享)中的静态函数/类

  1. 函数中的静态变量在调用之间保持其值
  2. 静态全局变量或函数仅在其声明的文件中“可见”

(1) 如果你是一个新手,这是一个比较陌生的话题,下面是一个例子:

#包括<标准h>
void foo()
{
INTA=10;
静态int-sa=10;
a+=5;
sa+=5;
printf(“a=%d,sa=%d\n”,a,sa);
}
int main()
{
int i;
对于(i=0;i<10;++i)
foo();
}

这张照片是:

a=15,sa=15
a=15,sa=20
a=15,sa=25
a=15,sa=30
a=15,sa=35
a=15,sa=40
a=15,sa=45
a=15,sa=50
a=15,sa=55
a=15,sa=60

如果函数需要在调用之间保持某种状态,并且您不想使用全局变量,那么这将非常有用。但是,请注意,此功能的使用应该非常谨慎-它使您的代码不是线程安全的,并且更难理解

(2) 被广泛用作“访问控制”功能。如果您有一个实现某些功能的.c文件,它通常只向用户公开一些“公共”功能。它的其余功能应该是静态的,这样用户就不能访问它们了。这是封装,一个很好的实践

引用维基百科:

在C编程语言中,静态
与全局变量和
函数将其作用域设置为
包含文件。在局部变量中,
static用于存储变量
在静态分配的内存中
而不是自动分配
记忆力而语言却不是
命令执行其中一项
静态分配的内存类型
内存通常保留在数据中
编译时的程序段
时间,而
分配的内存通常是
作为临时调用堆栈实现

回答你的第二个问题,它不像C

中,代码> static 也用来定义类属性(在同一个类的所有对象之间共享)和方法。在C语言中没有类,所以这个特性是不相关的

发表评论