(C++算法工程师考点总结)基础
1、源程序是如何被编译成可执行的二进制程序的 预处理: 在程序编译之前,由预处理器对C++源程序完成预处理工作。预处理主要将源程序中的宏定义指令、条件编译指令、头文件包含指令以及特殊符号完成相应的替换工作。(该步骤不进行语法检查,这就是inline函数比宏定义安全的原因) 编译器: 以预编译的输出作为输入,利用C++运行库,通过词法分析和语法分析,在确认所有的指令都符合语法规则时,将其翻译成等价的中间代码表示或是汇编语言(.s 文本文件) 汇编器: 将以汇编语言的形式存在的程序转化为机器可识别的二进制代码(.o 二进制文件) 链接器: 经过汇编器之后的目标文件仍然是不可执行的,因为缺乏程序运行必须的动态链接库(.dll)和静态链接库(.lib),链接器就是将程序所引用的外部文件关联起来,形成 .exe 后缀的可执行文件。 2、动态链接库和静态链接库 静态链接库和动态链接库都是共享代码的方式。 静态链接库: 如果采用静态链接库,则无论你愿不愿意,lib中的指令都全部被直接包含在最终生成的EXE文件中。 静态链接库中不能包含其他的静态链接库或者动态链接库。 动态链接库: 若使用动态链接库,该DLL不必被包含在最终的EXE文件中,EXE文件执行时,可以“动态地”引用和卸载这个与EXE独立的DLL文件。 动态链接库中可以继续包含其他的静态链接库或者动态链接库。 3、C/C+