【问题标题】:What does static mean in ANSI-C [duplicate]ANSI-C中的静态是什么意思[重复]
【发布时间】:2011-06-02 08:58:24
【问题描述】:

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

static 关键字在 C 中的含义是什么?

我正在使用 ANSI-C。我在几个代码示例中看到过,它们在变量前面和函数前面使用了static 关键字。使用变量的目的是什么?和函数一起使用的目的是什么?

【问题讨论】:

标签: c static keyword ansi-c


【解决方案1】:

作为一个简短的回答,static 关键字在定义变量时有两种用法:

1- 使用static 关键字在文件范围内定义的变量,定义的外部函数将仅在该文件中可见。任何从其他文件访问它们的尝试都将导致在链接时出现未解析的符号。

2- 在函数块内定义为static 的变量将在同一代码块的不同调用中持续存在或“存活”。如果它们被定义为初始化,那么它们只被初始化一次。 static 变量通常保证默认初始化为0

【讨论】:

  • 关于1:静态也可以应用于函数,也可以隐藏在外面。
  • 在这个问题的其他版本中已经说过,但对于那些来自谷歌的人来说,严格来说 1 适用于编译单元而不是文件。
  • @Roux hass: "如果它们被定义为初始化" 那是什么意思?如果它们在定义时被初始化为非零值?
【解决方案2】:

static 在函数体内,即用作变量存储分类器,使该变量在函数调用之间保留其值——可以说,函数内的静态变量是全局变量,仅对其可见功能。 static 的这种使用总是使得它在线程中使用的函数不安全你应该避免它。

另一个用例是在全局范围内使用static,即用于全局变量和函数:静态函数和全局变量是编译单元的本地变量,即它们不会出现在编译后的导出表中二进制对象。因此它们不会污染命名空间。将所有函数和全局变量声明为不能从相关编译单元(即 C 文件)外部访问是个好主意!请注意,静态变量不能放在头文件中(除了非常罕见的特殊情况)。

【讨论】:

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