相信对于很多非计算机或者软件工程专业的同学来说,平时所写的代码一般都是不重视代码结构的,因为代码量一般也就几百上千行,凑合能跑就完事儿了。本人就是一个测绘专业的计算机菜鸟,家在农村,条件很差,大一才开始接触计算机,又是测绘专业,学了点C、C#、Fortran,考试也是笔试,学来学去也只学了个基础,而且很多语言长时间不用,慢慢地连基本语法都忘记怎么写了,需要用的时候再面向百度编程,长此以往,一直在低水平重复。曾经用C#写过一个接近一万行的窗体程序,各种bug,run是能run,但只有我能run,没有开发文档,没有命名规范,没有用户接口,简直就是一坨憋了几个月才屙出的屎。
现在上了研究生,终于学聪明了,能用别人的代码坚决不自己写。但是有时候还是免不了自己写一些小项目,这个时候就不能再像本科那样瞎搞了,还是要按照规范来。因此,特意开这么个专栏来记录c++的学习过程。各位不小心点进来的也别嫌我啰嗦,毕竟我不是专业的。
正文
相信各位都注意到每次写c++程序前面都要来一句:#include <iostream>,而且大家也都知道这是包含了一个输入输出的函数库,没有它就不能调用相应的函数了。同样的,我们自己在写代码的时候也免不了去写一些函数,相信很多人刚开始写的时候都是将这些函数和main函数放在一个文件中,久而久之,这个文件中的代码越来越多,最终可能达到上千行(我就这么写过)。
这就带来很多问题,首先看上去就心烦,乱七八糟的代码一眼望不到头,再来维护起来很麻烦,找来找去实在是令人头疼。甚至某一天你毕业了,这份代码作为遗产传到了你师弟师妹的手中,估计他们看两眼恨不得连电脑都给砸喽。
因此,我们为什么不像#include <iostream>那样将自己的那些与业务逻辑无关的函数都写到其它文件中再包含到主文件呢?看上去多么神清气爽啊!
接下来,就是菜鸟演示了(Ubuntu 18.04):
1.打开终端,sudo apt-get install g++,安装c++编译器。
2.mkdir test,cd test,新建并进入test文件夹。
3.touch main.cpp,touch math.cpp,touch math.h,新建三个c++文件,其中有一个头文件。
main.cpp的内容如下:
#include <iostream>
#include "math.h" //表示math.h在当前路径下,如果在子文件夹中,可以使用"xxx/math.h"
using namespace std;
int main(){
int c=add(1,2); //在math.h中声明,在math.cpp中定义的函数
cout<<"c="<<c<<endl;
return 0;
}
math.h的内容如下:
#include <iostream>
int add(int a, int b); //函数的声明
math.cpp的内容如下:
#include <iostream>
using namespace std;
int add(int a, int b){
return a+b;
}
4.使用g++编译并执行这个项目:
g++ -c math.cpp main.cpp
g++ math.o main.o -o test.out
其中,-c 表示只编译不链接,-o 表示指定所生成的可执行文件的名称。编译后会生成.o的中间文件,最后生成的可执行文件的后缀名为.out
在终端中输入:./test.out,则会运行并输出运算结果。
大家可以看到我的输入和前面介绍的不一样,这是因为我的math.cpp和math.h在与main.cpp同一目录的utils文件夹下面,因为我觉得不同类型的文件尽量不要放在同一目录下,这样方便管理。文件目录如下:
|--test
|----main.cpp
|----utils
|--------math.cpp
|--------math.h