写在前面

大家好哈哈,前段时间太忙了,好久没写啦,这次的话我准备写一个c++的系列,这个系列将包括c++基本语法以及STL编程的部分。

整个结果的验证都会在虚拟机下面的ubuntu1804下进行,利用g++进行编译源文件,所有程序都只将提供图片,不提供源码哦,希望大家看了之后能够自己动手敲程序,这样才能加深理解。

如果文章内容有错误,请在评论区指出,博主一定会第一时间进行检查并及时给予修正。

正文

系列第一篇我先写一些简单的,那就是头文件的包含,在cpp文件里包含头文件时候到底会发生什么呢?让我们一起来探索一下。

首先编写main.cpp文件,more指令可以查看text文本内容:

如果要查看那个文件不是text文件的话会有提示的:

言归正传,可以看到main.cpp里面包含了include.h这个头文件,那我们再来看看这个文件里面有什么:

好的,我们现在编译一下这个main.cpp文件,同时保存编译的中间文件。

g++在编译的过程中会有如下的流程:

那我们来查看一下实际生成了什么东西:

跟我们上面的写的过程也是相匹配的,因为今天探索的是包含头文件意味着什么,接下来就开始实际操作吧。

main.ii里面是编译预处理之后的结果,所以我们来查看一下main.ii里面有什么东西:

通过查看main.ii之后就可以看到,整个include.h文件嵌入到了main.cpp的开头部分,也就是说编译预处理的时候会将include.h放到main.cpp的开头,这就是头文件包含的意义。

这个时候我们再做一个小修改:

可以看到我在main.cppinclude.h里面都添加了int i(0);这个语句,此时编译会有什么结果呢?我们来运行看一下:

可以看到,编译器报了错误,这是因为包含了include.h文件之后,编译器识别到了有2个相同名称的变量i,所以有了重定义的错误。

解决这个问题也比较简单,在include.h文件里面的int i前面加上extern关键字就可以啦。

养成好习惯,头文件里面放声明,实现文件里面放定义。