【发布时间】:2018-06-21 09:14:45
【问题描述】:
我了解 C++ 中的变量存在三种可能的链接值 - 无链接、内部链接和外部链接。
所以外部链接意味着变量标识符可以在多个文件中访问,内部链接意味着它可以在同一个文件中访问。但是内部链接的意义何在?为什么不只为标识符提供两种可能的链接——无链接和外部链接?在我看来,全局(或文件)范围和内部链接似乎具有相同的目的。
是否存在全局范围未涵盖的内部链接实际有用的用例?
在下面的示例中,我有两段代码——第一段链接到静态 int i11(具有内部链接),第二段没有。两者几乎都做同样的事情,因为 main 由于其文件范围已经可以访问变量 i11 。那么为什么有一个单独的链接称为内部链接。
static int i11 = 10;
int main()
{
extern int i11;
cout << ::i11;
return 0;
}
给出与
相同的结果static int i11 = 10;
int main()
{
cout << ::i11;
return 0;
}
编辑: 只是为了更清楚地说明,根据下面 HolyBlackCat 的定义,内部链接实际上意味着您可以在同一个翻译单元中前向声明一个变量。但是,为什么您甚至需要对文件中已经可以全局访问的变量执行此操作.. 此功能有任何用例吗?
【问题讨论】:
-
如果变量没有链接,您将根本无法访问它。
-
外部链接适用于当您有多个 .c(或 .cpp)文件(未包含的文件,这些文件计为包含它们的 .c 文件的一部分)时,您希望从中单独编译彼此。
-
This.我可能弄错了,但“无链接”似乎意味着“不能向前声明”。
-
为什么你认为第二个 sn-p 展示了不同的链接?
-
这对于一组相互调用的静态函数可能很有用,并且可能只是因为没有理由禁止它而允许用于变量。