C/C++是如何编译多个文件的

首选要理解一个概念叫“翻译单元”,可以简单地理解为: 一个.cpp/.c文件以及它包含的所有.h文件就是一个独立的翻译单元。

编译器在工作时,是一个个地处理这些翻译单元的: a.cpp -> 编译器 -> a.obj b.cpp -> 编译器 -> b.obj

最后,连接器会把所有.obj文件和库文件连接起来,组合成最终的输出文件,如.exe.dll。

static关键字的含义

当static作用在函数外面,也就是全局作用域的时候,它的核心作用是改变变量的链接属性。它告诉编译器: 这个变量是内部链接的,只属于这个翻译单元,不要把它暴露给链接器,其他文件也无法访问它。

与之相对的是外部链接,即不加static的全局变量,链接器知道它的存在,其他文件可以通过extern找到并使用它。