范围和链接有什么区别?

use*_*717 5 c scope linkage

我尝试了不同的网站,但我不明白。你能用简单的英语解释一下吗?

Pau*_*vie 5

“scope”是编译器的命名空间;“链接”是关于编译单元的。

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

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

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

这也适用于函数。


Dox*_*ver 1

继续阅读您的页面 ( http://msdn.microsoft.com/en-us/library/teta4z44.aspx )。这是谈论翻译单元(源文件)之间的对象的可见性。它首先讨论“内部链接”:定义为 的对象static,对于翻译单元是唯一的,但在整个过程中都可用。

接下来讲“外部链接”:未声明的同类级别对象static。这些在翻译单元之间共享。

最后,“无链接”:一个对象,例如函数内的变量,未声明extern,对于该范围是唯一的。

如果您点击页面底部的链接,一切都会得到解释。