可能重复:
What does “static” mean in a C program?
Static vs global
“静态”在C中的含义是什么,给出以下示例:“static struct ........”?
这与“结构......”之间的差异是什么,没有“静态”?
答案 0 :(得分:3)
在函数外部,static会将其应用于文件范围。例如:
int a_function(int x) { ... }
此函数将具有全局链接,并且可以由任何其他目标文件访问。您只需声明它就可以使用它,就像通常在头文件中一样:
int a_function(int x);
但是,如果在定义中使用static,则该函数仅对定义它的源文件可见:
static int a_function(int x) { ... }
在这种情况下,其他目标文件无法访问此功能。这同样适用于变量:
static int x;
这使x成为一个全局变量,仅在其源文件中可见。 “静态结构”本身没有做任何事情,但请考虑这种语法:
struct {
int x;
int y;
} p1, p2;
这声明了两个全局变量(p1和p2),每个变量都是一个“匿名”结构类型。如果你追加静态:
static struct {
int x;
int y;
} p1, p2;
然后静态应用于p1和p2,使它们仅在源文件中可见。
答案 1 :(得分:1)
static告诉函数或数据元素只在范围内知道 当前编译。
此外,如果将static关键字与函数本地的变量一起使用,则允许在对该函数的连续调用之间保留变量的最后一个值。
所以,如果你说:
static struct ...
在源文件中没有其他源文件可以使用结构类型。甚至没有外部声明。但如果你说:
struct ...
然后其他源文件可以通过extern声明访问它。
答案 2 :(得分:0)
我不是C程序员,但如果C中的static
表示与其他语言类似,我使用STATIC STRUC,这意味着该结构在此类的所有实例中都很常见。
假设我有一个名为Z的类变量。通常的行为是此变量的值特定于类的特定实例,但是当它是静态时,该类的所有实例共享相同的Z值。所有时间。
我不知道这对C是怎么适用的,不是C对象吗?