当前位置:  开发笔记 > 编程语言 > 正文

static - 仅用于限制范围?

如何解决《static-仅用于限制范围?》经验,为你挑选了2个好方法。

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

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

在file1.c

int a;

file2.c中

int b;

file3.c中

static int c;

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

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



1> paxdiablo..:

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

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

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

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

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


这里的大部分混淆源于"他们自己的发明者".不,你不能在这里发明你自己的条款.如果您仍然需要,则必须为自己的术语选择"未使用"的单词,并且必须为这些术语提供精确的定义.至于已经标准化的术语:再次,不,你不会[重新]发明它们,无论你想要多少.并且"可见性"和"范围"已经被采取,抱歉.
你所谓的"可见性"实际上被称为"联系".可见性完全不同."可见性"与"范围"相同.`static`对可见性没有影响.`static`对范围没有影响.
是的,我正在发明自己的术语.如果我教某人*标准*,我会很乐意使用那里的条款.但是,当我刚刚向学生讲授C的基础知识时(看起来chronodekar就是那个级别),我将使用更有意义的术语.
......对于刚开始学习语言的人来说,这一点尤为重要.对他们来说没有比将"普遍接受的不正确的自我发明的定义""植入"他们的头脑更加不利的了.

2> AnT..:

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

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

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

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有