预处理
编译器将在编译前进行处理pre-process(预处理句)。常见的预处理句#include,#if,#define,#endif。预处理句子的功能非常简单。
#include 找到后面的文件,找到文件的内容copy进来 #if 和 #endif 判断句子简单 #define A B 将cpp文件中的B都被替换A
编译
.cpp文件的后缀名告诉编译器这是C 文件,用C 编译规则。
补充 translate unit:编译器将.cpp文件编译成.obj文件,此时.cpp文件称为translate unit,因为.cpp文件里可能include其他cpp文件,所以translate unit不一定只有一个.cpp文件
编译器完成预处理后,cpp文件将被编译器编译成机器代码文件.obj文件,.obj文件中有一堆字母数字,.obj文件无法运行。
链接
build在项目中,一切obj连接文件,形成可操作性.exe文件obj成功链接文件,cpp如果文件中引用了其他文件cpp文件的方法,需要声明。
如果没有声明,编译就会出错;如果声明的方法不存在,链接就会出错
补充 以下链接错误可能现错误
- 方法的声明和定义不同
- 如果某种方法只在自己身上,cpp文件起作用,static修饰
- 可能有多个项目cpp同样的文件调用.h文件,由于include链接错误有三种解决方案
- 1.将.h文件中的方法用static修饰;
- 2.将.h使用文件中的方法inline修改意味着只使用方法的方法;
- 3.只在头文件中留下方法声明,将方法的定义放在使用头文件的其中一个中cpp文件中