Hea*_*utt 23
static在C中使用有几个原因.
当与函数一起使用时,是的意图是创建抽象.C源代码文件范围的原始术语是"翻译单元".静态函数只能在同一个翻译单元中到达.这些静态函数类似于C++中的私有方法,自由解释(在这个类比中,翻译单元定义了一个类).
也无法从翻译单元外部访问全局级别的静态数据,这也用于创建抽象.此外,所有静态数据都初始化为零,因此static可用于控制初始化.
本地("自动")变量级别的静态用于抽象函数的实现,该函数在调用之间维护状态,但避免在转换单元范围使用变量.同样,由于静态限定,变量被初始化为零.
关键字static有几种用途; 在函数之外,它只是将函数或变量的可见性限制在函数或变量出现的编译单元(.c文件)中.这样,函数或变量就不会变为全局.这是一件好事,它促进了一种"需要知道"的原则(不要暴露不需要暴露的东西).此类型的静态变量初始化为零,但当然全局变量也初始化为零,因此static关键字本身不负零初始化.
变量也可以在函数内声明为静态.此功能意味着变量不是自动的,即在每次调用函数时在堆栈上分配和释放.相反,变量在静态数据区域中分配,它被初始化为零并在程序的生命周期中持续存在.如果函数在一次调用期间修改它,则新修改的值将在下次调用时可用.这听起来是件好事,但有很好的理由"auto"是默认值,并且函数中的"静态"变量应该谨慎使用.简而言之,自动变量具有更高的内存效率,如果您希望函数是线程安全的,则必不可少.