static
C中的关键字是否仅用于将变量的范围限制为单个文件?
我需要知道我是否理解这一点.请假设以下3个文件,
在file1.c
int a;
file2.c中
int b;
file3.c中
static int c;
现在,如果3个文件一起编译,那么变量"a"和"b"应该具有全局范围,并且可以从3个文件中的任何一个访问.但是,变量"c"是静态的,只能从file3.c访问,对吗?
请问static
在C任何其他用途?(除了限制变量的范围,如上所示?)
该static
关键字提供用C两个不同的目的,我通话时间(对象的寿命)和可见性(在这里您可以使用对象的).请记住,C标准实际上对这两个概念使用了不同的单词,但我发现在教授语言时最好先使用日常术语.
在文件级别(任何函数之外)使用时,它控制可见性.在文件级别定义的变量的持续时间已经定义为程序的整个持续时间,因此您不需要这样做static
.
文件级别的静态变量对于翻译单元之外的任何内容都是不可见的(链接器无法看到它).
在功能级别(函数内部)使用时,它控制持续时间.那是因为可见性已被定义为该功能的本地.
在这种情况下,变量的持续时间是程序的整个持续时间,并且在函数的调用之间保持值.
您滥用术语"范围".static
在C中与范围完全无关.
范围是可见实体名称(变量,函数,类型名称等)的区域.在C语言中,"文件范围"是有史以来最大的范围.出于这个原因,将任何内容限制在单个文件中是没有意义的:没有什么比这更大的了.在C中没有"全局范围"这样的东西.术语"全局范围"有时是非正式使用的,但在这种情况下它与"文件范围"具有相同的含义.
再次,static
在C中与范围完全无关.static
in C影响对象的存储持续时间和标识符的链接.当与对象(变量)一起使用时,static
给对象提供静态存储持续时间(即,只要程序运行,对象就存在).并且,当与非本地对象或函数的标识符一起使用时,它为它们提供内部链接,这意味着相同的标识符指的是单个翻译单元(定义实体的位置)内的同一实体,而不是其他翻译单元.