“静态”在C中意味着什么?`

时间:2010-02-18 08:41:15

标签: c

  

可能重复:
  What does “static” mean in a C program?
  Static vs global

“静态”在C中的含义是什么,给出以下示例:“static struct ........”?

这与“结构......”之间的差异是什么,没有“静态”?

3 个答案:

答案 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对象吗?