C语言 – “static”在C中意味着什么?

static在C代码中看到了不同地方使用的单词; 这就像C#中的静态函数/类(其中实现是跨对象共享的)?


  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与全局变量和函数一起使用,以将其范围设置为包含文件。在局部变量中,static用于将变量存储在静态分配的内存中,而不是自动分配的内存中。虽然该语言没有规定任何类型的存储器的实现,但是静态分配的存储器通常在编译时保留在程序的数据段中,而自动分配的存储器通常被实现为瞬态调用栈。

有关详细信息,请参见此处此处

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

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


还有一个用途未在此处介绍,它作为数组类型声明的一部分作为函数的参数:

int someFunction(char arg[static 10])
{
    ...
}

在此上下文中,它指定传递给此函数的参数必须是一个类型数组,char其中至少包含10个元素。有关详细信息,请参阅此处的问题。

Tags:, ,

添加评论

友情链接:蝴蝶教程