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


What does “static” mean in C?`

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicates:
What does “static” mean in a C program?
Static vs global

在C中,"static"是什么意思,举个例子:"static struct………"?

这个和"struct……"没有"static"有什么区别?


在函数外部,static使应用它的任何内容都具有文件范围。例如:

1
int a_function(int x) { ... }

此函数将具有全局链接,并且可以被任何其他对象文件访问。您只需要声明它就可以使用它,就像通常在头文件中那样:

1
int a_function(int x);

但是,如果在定义中使用static,那么函数仅对定义它的源文件可见:

1
static int a_function(int x) { ... }

在这种情况下,其他对象文件无法访问此函数。同样适用于变量:

1
static int x;

这使x成为一个全局变量,仅在其源文件中可见。一个"静态结构"本身不做任何事情,但要考虑以下语法:

1
2
3
4
struct {
    int x;
    int y;
} p1, p2;

这声明了两个全局变量(p1和p2),每个变量都是"匿名"结构类型。如果附加静态:

1
2
3
4
static struct {
    int x;
    int y;
} p1, p2;

然后静态应用于p1和p2,使它们仅在源文件中可见。


static表示函数或数据元素仅在当前编译。

此外,如果将static关键字与函数局部的变量一起使用,则允许在对该函数的连续调用之间保留变量的最后一个值。

所以如果你说:

1
static struct ...

在源文件中,没有其他源文件可以使用结构类型。即使有外部声明也不行。但是如果你说:

1
struct ...

然后其他源文件可以通过外部声明访问它。


我不是C程序员,但是如果C语言中的static和其他语言中的一样,我使用静态struc,这意味着这个结构在这个类的所有实例中都很常见。

假设我有一个名为z的类变量。通常的行为是,这个变量的值特定于一个类的特定实例,但是当它是静态的时,该类的所有实例在任何时候都共享相同的z值。

我不知道这是如何适用于C的,C对象不是更少吗?