范围和联系有什么区别?

时间:2014-10-27 01:43:45

标签: c scope linkage

我尝试了不同的网站,但我没有得到它。你能用简单的英语解释一下吗?

2 个答案:

答案 0 :(得分:1)

“scope”是编译器的命名空间; “联系”是关于编制的单位。

我解释一下:在函数中声明的变量具有该函数的范围,即它仅在该函数内可见。在源文件中声明为static的变量只能由该源文件中的代码(以及所有包含的文件!)看到。变量也可以具有全局范围:它们可以在源文件中引用,但不在该源文件中声明(分配),而是在另一个源文件中声明。

我们应该说“编译单元”代替“源文件”,因为它是正在编译的C源文件,加上所有包含的文件。范围是指编译器可以在编译单元中“看到”的所有内容。这些是命名空间。

编译项目后,有许多目标文件,每个编译单元一个。每个都可以引用未在编译单元中声明的变量。链接器现在必须解析目标文件之间的这些引用:linkage。

这也适用于功能。

答案 1 :(得分:0)

继续阅读您的信息页(http://msdn.microsoft.com/en-us/library/teta4z44.aspx)。这是在讨论翻译单元(源文件)之间对象的可见性。它首先讨论"内部链接":定义为static的对象,对于翻译单元是唯一的,但始终可用。

接下来,它讨论"外部链接":未声明static的类似对象。这些是在翻译单位之间共享的。

最后,"没有链接":一个对象,如函数中的变量,未声明extern,这是该范围所特有的。

如果您按照页面底部的链接进行操作,则说明一切。