以下文章是吸收+原创。
参考blog:
https://blog.csdn.net/candcplusplus/article/details/53326368、https://blog.csdn.net/candcplusplus/article/details/7317472
作为菜鸟的我们,显然我们已经接触了如此多的C++的编程。但是,一到多个文件的时候就歇菜。什么.h、.cpp,到底该include什么,使用“”号来include还是用<>来include。
我们先从最简单的说起,从0开始多文件。
假设我们想定义func1、func2、func3在一个文件中,我们只要这样写即可。
#include <cstdio>
void func1(){
printf("i am func1\n");
}
void func2(){
printf("i am func1\n");
}
void func3(){
printf("i am func1\n");
}
int main() {
func1();
func2();
func3();
return 0;
}
现在我们现在要把三个函数放到.h文件中。
C++中,一般的规范是:
.h文件中声明函数(function decleration),
.cpp中定义函数(function definition,或者说实现函数)。
上面的代码直接定义函数和声明函数在一块了,我们分开写的话是这样:
#include <cstdio>
//先声明
void func1();
void func2();
void func3();
int main() {
func1();
func2();
func3();
return 0;
}
//后定义(实现函数)
void func1(){
printf("i am func1\n");
}
void func2(){
printf("i am func1\n");
}
void func3(){
printf("i am func1\n");
}
我们想要的结果,是直接#include "my.h"就能直接用func1、func2、func3函数,那么我们就把func123的声明放进my.h头文件中。直接新建文件,然后放进去就可以。
上面说了,只有头文件(.h)只放声明,具体的实现要用cpp文件。于是再新建一个cpp文件,里面放进去函数的定义。
这样你整个工程就有如下三个文件:
main.cpp,里面有main函数
my.h,里面有三个函数的声明
my.cpp,里面有三个函数的实现
到这里你要做的实际上就做完了。之所以还不能直接include,是因为编译要其他的配置文件,而那些文件是C++之外的。为了方便,我们直接使用dev,新建项目,沿着上面的思路新建文件。在编译的时候dev会自动帮我们生成其他配置的文件,帮我们给编译指令加参数。
tips:这里你可能问,为什么abc.h就能找到abc.cpp作为它的实现呢?就是因为各种配置文件和各种编译指令选项等等,所以我们利用dev来解决这些C++之外的事情。
自己选择一个文件夹。然后打开dev,文件->新建->项目。把项目放在你刚刚新建的项目。
沿着上面的思路,把函数定义和函数声明的代码分开写(把我第二部分的copy到main文件里)。
然后从dev文件选项里:新建->源代码,把函数声明放进去;然后新建另一个源代码,把函数实现放进去。
注意:
1.你.h文件和.cpp文件的名字需要是一样的,这样dev才能自动帮你连起来他们;
2.不要自己在dev外面直接右击新建文件,这样可能dev识别不到。
3.新建完源代码保存的时候记得自己调文件类型和名字,记得保存在你项目的目录。
经过上面的操作,你项目文件夹里面应当有一些dev帮你自动生成的layout文件等。
主要代码以下:
//my.h file
#include <cstdio>
void func1();
void func2();
void func3();
//my.h end
//main.cpp file
#include "my.h"
int main() {
func1();
func2();
func3();
return 0;
}
//main.cpp end
//my.cpp file
#include "my.h"
void func1(){
printf("i am func1\n");
}
void func2(){
printf("i am func1\n");
}
void func3(){
printf("i am func1\n");
}
//my.cpp end
这样就可以了。直接在dev里编译运行,你会发现的项目里多了许多文件。
其背后的秘密:
C ++程序的编译单位为每个源文件,整个编译过程大致可以分为四个阶段:预处理、编译、汇编、链接。每个编译单元都会经过预处理、编译,最后将各个单元生成的中间文件链接到一起形成可执行文件。
预处理阶段的工作主要包括:宏替换、头文件包含内容替换等。
编译阶段的主要工作是:将预处理后的源文件转换成汇编代码。
汇编阶段的主要工作是:将上一阶段生成的汇编代码编译成二进制文件,即中间文件。
链接阶段的主要工作是:将各中间文件链接到一起,生成可执行文件。
以下图来源:https://blog.csdn.net/candcplusplus/article/details/53326368