【发布时间】:2010-12-20 04:55:33
【问题描述】:
C 中的static 关键字是否仅用于将变量的范围限制为单个文件?
我需要知道我是否理解正确。请假设以下 3 个文件,
file1.c
int a;
file2.c
int b;
file3.c
static int c;
现在,如果 3 个文件一起编译,那么变量“a”和“b”应该具有全局范围,并且可以从 3 个文件中的任何一个访问。但是,变量“c”是静态的,只能从file3.c访问,对吧?
static 在 C 中还有其他用途吗? (除了如上所示限制变量的范围?)
【问题讨论】:
-
变量 a & b 在其他 C 文件中不可见,除非您“外部化”它们。
-
@Murali;不完全正确,如果你定义“int a;”你会遇到链接问题在两个文件中。
-
哦,记录一下。它不限于文件,它的范围是编译单元。很有可能在另一个“.c”文件中包含一个“.c”文件,或者就此而言,声明一个“int a;”在 .h 文件中。这不是很好的风格,但很有可能。
-
@chronodekar:您似乎遇到了术语混淆。不幸的是,这里的大多数人都这样做。请停止混用“可见性”、“范围”和“链接”。标识符始终只在一个翻译单元中可见:从声明点到翻译单元结束。标识符可见的区域称为“范围”。 IE。 “范围”和“可见性”是同一回事,它总是对单个翻译单元来说是本地的。现在,“联动”是一个更加全球化的概念。链接是从不同翻译单元链接到同一个对象的能力。
-
可以从另一个翻译单元链接到具有外部链接的对象(通过在此处声明它们)。无法从另一个翻译单元链接到具有内部链接的对象。这就是
static所控制的——链接。static不影响范围(和可见性)。