static - 仅用于限制范围?

chr*_*kar 7 c static scope

staticC中的关键字是否仅用于将变量的范围限制为单个文件?

我需要知道我是否理解这一点.请假设以下3个文件,

在file1.c

int a;
Run Code Online (Sandbox Code Playgroud)

file2.c中

int b;
Run Code Online (Sandbox Code Playgroud)

file3.c中

static int c;
Run Code Online (Sandbox Code Playgroud)

现在,如果3个文件一起编译,那么变量"a"和"b"应该具有全局范围,并且可以从3个文件中的任何一个访问.但是,变量"c"是静态的,只能从file3.c访问,对吗?

请问static在C任何其他用途?(除了限制变量的范围,如上所示?)

pax*_*blo 12

static关键字提供用C两个不同的目的,我通话时间(对象的寿命)和可见性(在这里您可以使用对象的).请记住,C标准实际上对这两个概念使用了不同的单词,但我发现在教授语言时最好先使用日常术语.

在文件级别(任何函数之外)使用时,它控制可见性.在文件级别定义的变量的持续时间已经定义为程序的整个持续时间,因此您不需要这样做static.

文件级别的静态变量对于翻译单元之外的任何内容都是不可见的(链接器无法看到它).

在功能级别(函数内部)使用时,它控制持续时间.那是因为可见性已被定义为该功能的本地.

在这种情况下,变量的持续时间是程序的整个持续时间,并且在函数的调用之间保持值.

  • 这里的大部分混淆源于"他们自己的发明者".不,你不能在这里发明你自己的条款.如果您仍然需要,则必须为自己的术语选择"未使用"的单词,并且必须为这些术语提供精确的定义.至于已经标准化的术语:再次,不,你不会[重新]发明它们,无论你想要多少.并且"可见性"和"范围"已经被采取,抱歉. (5认同)
  • 你所谓的"可见性"实际上被称为"联系".可见性完全不同."可见性"与"范围"相同.`static`对可见性没有影响.`static`对范围没有影响. (4认同)
  • 是的,我正在发明自己的术语.如果我教某人*标准*,我会很乐意使用那里的条款.但是,当我刚刚向学生讲授C的基础知识时(看起来chronodekar就是那个级别),我将使用更有意义的术语. (2认同)
  • ......对于刚开始学习语言的人来说,这一点尤为重要.对他们来说没有比将"普遍接受的不正确的自我发明的定义""植入"他们的头脑更加不利的了. (2认同)
  • 真是一个绝对的瓦罐。您真的相信标准中的所有这些术语都能让新手变得“更清晰”吗?此时谈论静态存储持续时间和外部链接对他们没有帮助。好吧,一旦他们学好这门语言,他们就可以研究深奥的部分,但在他们刚开始的时候就不行了。再说一遍,如果我正在与“语言律师”或非常了解该标准的人交谈,我很乐意使用实际术语。但我不会以更容易理解的方式解释基本概念,从而对任何学习者造成伤害。你需要决定你的受众。 (2认同)

AnT*_*AnT 5

您滥用术语"范围".static在C中与范围完全无关.

范围是可见实体名称(变量,函数,类型名称等)的区域.在C语言中,"文件范围"是有史以来最大的范围.出于这个原因,将任何内容限制在单个文件中是没有意义的:没有什么比这更大的了.在C中没有"全局范围"这样的东西.术语"全局范围"有时是非正式使用的,但在这种情况下它与"文件范围"具有相同的含义.

再次,static在C中与范围完全无关.staticin C影响对象的存储持续时间和标识符的链接.当与对象(变量)一起使用时,static给对象提供静态存储持续时间(即,只要程序运行,对象就存在).并且,当与非本地对象或函数的标识符一起使用时,它为它们提供内部链接,这意味着相同的标识符指的是单个翻译单元(定义实体的位置)内的同一实体,而不是其他翻译单元.