【问题标题】:Static functions and variables in CC中的静态函数和变量
【发布时间】:2012-10-27 01:33:53
【问题描述】:

我知道在面向对象语言中使用静态变量的目的是什么,但我仍然不明白在 C 中使用“静态”关键字是什么意思。 谁能给我解释一下?

【问题讨论】:

  • OO与它有什么关系?即使是维基百科的定义也应该为你回答这个问题,不是吗?
  • 它有很多不同的含义。发布一些代码来解释你到底在追求哪一个,并说明为什么你的 C 教科书没有涵盖这一点。
  • 我知道,在面向对象的语言中,当您使用静态变量时,每个类只创建一次,而不是为类的每个实例创建一次。这就是我提到 OO 的原因。

标签: c function variables static


【解决方案1】:

在函数或全局变量上,static 使函数或全局变量成为该文件的本地变量;其他文件无法通过该名称访问该函数或全局变量(但如果您将指针指向它,它们可以访问它)。

在局部变量上,它使它的行为就好像它是一个全局变量一样,但只能在该函数内访问(除非再次给出指向它的指针)。

【讨论】:

  • 另外,全局静态函数/变量通常在 .c 文件中进行保护,但在 .h 文件中没有用... @icktoofay 我是对的?
  • @GrijeshChauhan:是的,你是对的; static 通常在头文件中用处不大(尽管我能想到一两个可能有用的案例)。
  • 请您分享您的想法!
  • @GrijeshChauhan:人们可能希望创建一个头文件,该文件声明一个表示模块初始化状态的静态布尔值(当然,初始化为 false),然后提供可以轻松定义初始化函数的宏模块,除非它已经被初始化。
  • 在标头中使用static 的另一个用途是具有可由编译器内联并保持C89 兼容的函数。
【解决方案2】:

静态变量在离开函数时的值与下次调用函数时变量的值相同。

静态函数只能从函数出现的同一文件中调用。

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2011-06-29
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多