程序结构
当程序逐渐变大变复杂, 将所有函数实现和定义放置在一个.cpp文件中就会变得不现实. 于是, 我们便需要将函数实现和定义分别放置在不同文件中.
分离后的项目结构大致如下
main.cppThe main functionmodule1.h模块1的函数定义module1.cpp模块1中函数定义的实现
对于用户定义的头文件, 使用如下方式导入
1 |
编译步骤
直接编译为可执行文件
1 | g++ main.cpp print.cpp input.cpp -o main |
分步编译
1. 编译单个模块
1 | g++ -c module1.cpp |
2. 链接
1 | g++ main.o module1.o module2.o -o main |
价值, 为何不直接include cpp
正常 #include .h:改 .cpp 实现时,只需要重新编译这个 .cpp,其他文件不用动。
如果 #include .cpp:改这个 .cpp 后,所有 include 它的文件都得重编,而且还可能因为函数被定义多次导致链接报错。
如何避免重复导入头文件
可以通过在头文件中加入 Header Guards 来规避这个问题
1 |
|
#ifndef FILE_NAME_H判断该头文件之前是否被定义过, 定义过则不进入该分支#define FILE_NAME_Hdefine头文件#endif结束该if分支
About this Post
This post is written by Jinyuan Zhou, licensed under CC BY-NC 4.0.