编译那些事

上班以后,开始接触make,make对于windows下的用户可能比较陌生,但是对于在*nix平台上开发的程序猿来说,就必须得了解一点。

我今天也不会说make的相关知识,只是闲谈一下make。

(1)大和小的相对论

想当初刚学习编程的时候,编写hello word程序,编写a+b程序,编写循环打印数组的程序。这些个小程序小到仅有几行代码,慢慢的小程序写多了,开始产生疑问,我这写的程序和自己玩的电脑游戏,和手机上的app,和浏览器中的网页有什么关系,特别是长期用C/C++编程的我,整天对着一个控制台,输入框。我深深的开始怀疑我自己,都编程一年多了,一直向往写一些非常牛的大程序,妄想能搞个大新闻,和马云肩并肩。当时理解的大程序就是操作系统,浏览器,dnf。我写的小和我向往的大,隔着几个银河系的距离,他们之间甚至没有半毛钱的关系。有写大程序的想法是好事,但对当时能力远远不够的我,有点好高骛远的意思,这给我造成了很大的困扰,有梦想是好事,但是,当你根本看不到希望的时候,你就没有前进的动力,所以很多在校的大学生,对自己的程序生涯,充满了困惑,我毕业了能干嘛。

我们小学学数学的时候,心智比较单纯,每天,掰着指头数数,1+1=2 1+2=3,当时也没有想着能解高次方程,求导,求极限。就是高等数学中各种蛋疼的问题。甚至都不知道有负数这个概念,根别谈什么分数。本身知识就是这个,由浅入深。随着问题的深入,问题变复杂,但是现在看来不管多么复杂的问题都是一些简单的问题组合而成,我坚信99乘法表会伴随我们一生。

(2)程序的发展

我也许就是想的太多,做太少,自己给自己增添发恼,随着学习,知识面的扩展,慢慢的发现,自己写的小程序,和所谓的大程序之间还是有千丝万缕的联系。

慢慢的学完顺序结构,选择结构,循环结构,在一个结构了嵌套一个结构,程序满满开始变得复杂,程序只有一个函数main,代码写一大堆。再vs下做程序开发,永远都是创建一个.cpp文件,然后写下几行

#include

void main()
{
      .....
}

main中间写自己的代码,定义变量,添加输入输入语句,赋值语句。没有模块化的思想,当时写的程序本来就很简单,根本就不涉及代码重复利用的说法,及时有写地方用到重复的代码,我们最爱干的事情就是把代码拷贝粘贴一次就够了。一起都很ok,程序越写越复杂,代码越写越多。慢慢的又从课堂上学到一个调用函数的思想function,不需要做些无用功,而且在我们代码查错,调试都变得非常便利,这似乎给我们写代码多了一个神器,我们离大程序有近了一点。

我所写过第一个比较复杂的程序,就是学生成绩管理系统,相信在大家的生涯中都会碰一个XX管理系统,而且可能碰到多个。我们第一次开始所谓大家分工合作,管理系统有插入,删除,查询,修改,这么几个功能,我和寝室室友一起完成,我们一共四个人,每个人写一个funtion,然后将几个拼接到一起,没有所谓的接口文档,没有所谓的命名规范,每个人按照自己的想法怎么开兴怎么来,每个人都有自己对function的理解,自己的函数有几个参数,开始函数的黑盒思想。然而将大家的程序拼接在一块,似乎是个很复杂的任务,每个人一上来就把自己的函数参数将了一遍,该怎么调用,有幸的是,大家写的都还行,不幸的是有个函数,需要推倒从写一遍。结局还是好的。

当然以上的代码都是在一个.cpp文件中,除了多了一个函数调用,似乎没有多大的变化。不过就是两百多行代码,放在一个文件中好像没有什么不妥的。

我们的程序设计仍然在变复杂,我们在学习的过程中多了.h 和 .cpp两种类型是文件,这种技术也是为了对程序更好的模块化,更好的开发思想。其实,我在编程的过程中还是挺抗拒多个.cpp文件,我跟倾向于将所有的代码,放在一个文件中,我当时没有看过上千行的代码,并且,在用vs编译程序时,我不懂编译规则,多个文件给我报了许多新的错误。想想现在大的程序,动不动就几千万行代码,也是可怕。

(3)编译是个拦路虎

VS上一个按钮就帮我把程序编译,连接好了,具体过程却不清楚,以前写小程序,当然没有必要理解编译的具体流程,我们当时主要是理解代码的编写规则,流程和语法,越少的干扰项越少。但是当编写规则不在是难题,而是在多个.cpp编译时,有问题时。这时候我们就得了解具体的编译流程,该来的总要来,我们要迎面解决。一个文件的中的函数被另一个文件调用,和调用本文件中的函数是一样的吗,为什么能调用不同文件的函数,为啥有.h和.cpp文件的区分,函数的声明,定义又和编译有啥关系。我们在走向复杂程序的康庄大道上的拦路虎。



未完。。。以上问题慢慢回答



 

你可能感兴趣的:(心路历程,编译,程序开发)