C中不同类型的静态

Jam*_*ter 1 c variables

我知道C中有三种类型的静态declerations:

1:常量 - 常量静态变量,例如:static const int i = 5;

2:Changable - 只是一个普通的静态变量,例如:static int hi = 10;

这是我的问题

还有另一种形式的静态,它采用"代码"的形式.这是什么意思,你能举个例子吗?

谢谢!

编辑:静态/常量变量是否存储在堆栈/堆上?

Cya*_*yan 8

也许你在谈论静态函数

这是"静态"一词的特定用法,它与静态变量完全不同.

当您声明一个函数"static"时,这意味着它无法从另一个源文件链接.它通常用于保持某些功能"私密".

[编辑]请注意,理论上,功能代码仍然可以使用指针从另一个源文件访问,但这并不是访问函数的常规方式(当然也不是最简单的方法).感谢Eric Postpischil指出这一点.

遗憾的是,在C标准中使用相同的单词"static"表示两种不同的东西,这取决于用于函数或变量.

[编辑]:这是一个不同的问题,但无论如何:在静态变量的情况下,它们既不在堆中也不在堆栈中分配.它们是静态的,这意味着它们被分配在静态空间中,在启动时由编译器直接分配.Stack用于内部函数变量,heap用于malloc()/ free().

  • `"内部联动"`是这个词;-) (3认同)
  • 从同一源文件(或翻译单元)外部访问静态函数是不正确的.`static`影响函数的链接,而不影响它的可访问性.`static`导致函数的标识符(名称)没有外部链接(在另一个翻译单元中引用相同的标识符相同的对象),但仍然可以通过将其地址传递给其他翻译中定义的例程来访问该函数.单位.同样,"范围有限"也没有更好的措辞; `static`影响联系,而不是范围. (2认同)