【问题标题】:What does "static" mean in C?` [duplicate]C中的“静态”是什么意思?` [重复]
【发布时间】:2011-01-18 05:43:49
【问题描述】:

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

C中的“static”是什么意思,举个例子:“static struct ........”?

这和没有“静态”的“结构......”有什么区别?

【问题讨论】:

标签: c


【解决方案1】:

我不是 C 程序员,但如果 C 中的 static 与其他语言中的含义类似,我会使用 STATIC STRUC,这意味着该结构在此类的所有实例中都是通用的。

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

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

【讨论】:

    【解决方案2】:

    static 告诉函数或数据元素仅在 当前编译。

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

    如果你说:

    static struct ...
    

    在源文件中没有其他源文件可以使用结构类型。甚至没有外部声明。但如果你说:

    struct ...
    

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

    【讨论】:

      【解决方案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,使它们仅在其源文件中可见。

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 2011-06-25
        • 1970-01-01
        • 2017-02-17
        • 2011-01-22
        • 2011-01-19
        • 2014-03-23
        • 2017-10-16
        相关资源
        最近更新 更多