" 联编 " Linkage 指的是 将 程序模块 和 代码 互相关联的过程 , 将不同源文件中的 同名函数 或 变量 进行链接 ;
在 C++ 语言中 , 每个 函数 或 变量 都有一个 链接属性 , 该链接属性决定了该 函数 或 变量 是否可以在其他源文件中使用 ;
联编 是通过 声明函数或变量 的 链接属性 进行控制 ;
C++ 中的 链接属性 有两种 : 内部链接 和 外部链接 ;
C++中的 联编概念 与 C 语言中的 链接概念 :
C 语言编译过程 参考 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 ) 博客 ;
链接操作 是 将 二进制的 .o 机器码文件 , 与 .a 静态库 或 .so 动态库 , 拼装成可执行文件 ;
静态联编 是指在 编译时 确定的 变量 和 函数 的 链接关系 ,
由 编译器 根据 函数和变量的声明 以及它们所在的 源文件 来确定它们之间的 链接关系 ;
在 C++ 语言中 , 所有的 函数和变量 默认都具有 外部链接 属性 ,
因此 , 只要在 不同的源文件 中 声明了相同的函数或变量名 , 就可以在 链接 时将它们 链接 在一起 ;
" 动态联编 " 是指在 运行时 确定的 链接关系 , 它是由 程序 在 运行时 根据需要 动态地 加载和链接 不同的模块 ;
C++ 语言中 没有 直接支持 动态联编 的特性 , 但可以使用 动态库 技术来实现动态链接 ;
进行 动态链接 时 , 使用 外部链接 属性的 函数或变量名 来 链接 不同的模块 ;
静态联编 和 动态联编 是两种不同的链接方式 , 其 链接时间 和 链接方式 都不同 ;
如果 函数前 不使用 virtual 关键字 修饰 , 就是 静态联编 ;
也就是 该 不使用 virtual 关键字 修饰的 函数, 在 编译器 编译阶段 , 就已经确定了 , 如何执行该函数 , 之后就无法修改了 ;
在 " 多态 " 中 , 如果 使用 virtual 关键字 修饰 函数 , 该函数就是 动态联编 ;
在 编译时 , 不确定 执行 哪个函数 ,
在 运行时 , 才确定 要执行 哪个 函数 ;