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语言中的
假设我有一个名为z的类变量。通常的行为是,这个变量的值特定于一个类的特定实例,但是当它是静态的时,该类的所有实例在任何时候都共享相同的z值。
我不知道这是如何适用于C的,C对象不是更少吗?