小编典典

C中的“静态”是什么意思?

all

static在 C 代码的不同地方看到过这个词;这是否像 C# 中的静态函数/类(实现在对象之间共享)?


阅读 123

收藏
2022-02-25

共1个答案

小编典典

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

如果您是新手,(1)是比较陌生的话题,所以这里有一个例子:

#include <stdio.h>

void foo()
{
    int a = 10;
    static int sa = 10;

    a += 5;
    sa += 5;

    printf("a = %d, sa = %d\n", a, sa);
}


int main()
{
    int i;

    for (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
文件,它通常只向用户公开一些“公共”功能。它的其余功能应该被制作static,这样用户将无法访问它们。这是封装,一个很好的做法。

引用维基百科

在 C 编程语言中,静态与全局变量和函数一起使用,以将其范围设置为包含文件。在局部变量中,static
用于将变量存储在静态分配的内存中,而不是自动分配的内存中。虽然语言没有规定这两种内存的实现方式,但静态分配的内存通常在编译时保留在程序的数据段中,而自动分配的内存通常实现为临时调用堆栈。

为了回答你的第二个问题,它不像在 C# 中。

然而,在 C++ 中,static也用于定义类属性(在同一类的所有对象之间共享)和方法。在 C 中没有类,所以这个特性是无关紧要的。

2022-02-25