前言
刚开始学C++,一个.cpp
文件就够了,类的定义,声明,实现统统都堆在一个文件中,然后编译连接,生成.exe
文件,就完成作业了。
但开始接触项目后,需要和别人一起完成一个大作业时,写在同一个main.cpp
明显会有些乱套,这时候,就需要分离编译了
先了解一下,我们使用的visual studio 2019
或者是 DevC++
都是怎么将我们编写的.cpp
文件变成.exe
可执行文件
详细可以看跟我一起写 Makefile(一)
分离编译
分离编译模式是指:一个程序(项目)由若干个
.cpp
源文件共同实现,而每个源文件单独编译生成.o
目标文件,最后将所有目标文件连接起来形成单一的.exe
可执行文件的过程
将一个项目划分出多个源文件后,逐一编译成目标文件,那这些目标文件又是凭什么相互连接在一起的?
这里就需要知道.h
头文件和.cpp
源文件的关系了
.h
头文件
写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说不写出具体的实现。
而为了防止头文件重复包含,一般头文件会有下面三行代码
#ifndef TEACHER_H
#define TEACHER_H
//代码
#endif // TEACHER_H
.cpp
源文件
源文件主要写实现头文件中已经声明的那些函数的具体代码。需要注意的是,开头必须
#include
一下实现的头文件,以及要用到的头文件
预编译
讲实际点,二者的关系就是:
在写a.cpp
文件时,需要#include "a.h"
而如果源文件a
需要用到源文件b
的代码,就在源文件a
中进行#include "b.h"
,而就是靠这个#include
,才能在链接时,将所有源文件最终合成一个可执行文件
其中#include
叫做编译预处理指令,因为头文件是不能被编译的,可以简单理解成,在a.cpp
中的#include "b.h"
指令把b.h
中的代码在编译前添加到了a.cpp
的头部。
预编译指令中,使用<>
和""
的区别:
引号会先在程序所在的路径里找 ,尖括号是从系统的头文件开始找