翻译单元

编译器在编译代码时,只会去编译.cpp格式的源文件,并且预编译器会递归的把.cpp所有#include的头文件都拷贝到.cpp文件中去,之后对这个文件再进行编译,生成二进制的.obj文件,然后链接器会将所有的obj文件进行链接,生成最终可执行文件。

所以每一个.cpp文件都是一个翻译单元

链接属性

链接属性决定了一个变量或函数是否可以被其他文件访问。

外部链接

实体(变量、函数)在整个程序中都是可见的。它可以在一个文件中定义,然后在其他文件中使用 extern 声明来访问。

内部链接

实体只在它所在的翻译单元(即单个 .cpp文件及其包含的头文件)内部可见。其他文件无法访问它。

默认是内部链接的实体

为什么要默认内部链接:为了避免多重定义错误

  • 全局的const变量。
  • 使用static修饰的全局变量和函数。
  • 匿名命名空间内的所有实体。