C/C++实践进阶之道:写给程序员看的编程书
上QQ阅读APP看书,第一时间看更新

6-1 再次Understand C

前面的章节,对C的语法做了一个概述,同时也提出了学习和实践的注意事项。下面让我们来对C语言做一个总结。

对于程序设计语言来说,十余年来我的体验可真不少。从古老的FORTRAN,VAX环境开始,Pascal,Basic,dBase,汇编,Object Pascal,Delphi都有一定的体验,甚至还尝试过一点C#,Java。可谓涉猎广泛。不过最钟爱的还是C/C++。

从C语言开始,C++,Delphi,C#,这基本上是我的学习曲线。不过,最近我有所回归,一方面是工作的需要——做嵌入式开发,另一方面是基于对C语言的重新理解。

1.六大特性构筑辉煌

究竟是什么让我们如此痴迷于C语言?为什么千千万万的程序员同时选择了C语言?

我总结了以下6个原因:

(1)小而简洁。

(2)高效率。

(3)足够的算法描述能力。

(4)强可移植性。

(5)结构化程序设计。

(6)信任程序员。

2.高级语言的最小子集

小而简洁是每次有人问我C语言特点的时候,想起的第一个回答。任何一个语言都是人类逻辑和机器逻辑的体现:机器逻辑只认识二进制的东西,不过还是可以简单地分为两类,代码和数据,代码演变成各种运算和if,while这些结构控制,数据演变成int,char,float,然后引入数组和struct组成复杂数据。加上代码和数据在内存中都有对应的地址,于是就有了指针的概念。结合结构化程序设计便有了函数。

你可能会说,任何高级语言都有这些特性,可是你不知道,比如Pascal语言,函数就分为“procedure和function”两种。而且有一个变量定义方式:var i:integer。即在函数中要改变函数外面的一个变量定义的值,看看C语言:int fun(int *i)即可,函数的定义和指针的定义一结合,就有一个新的特性。所以我说C语言是高级语言的最小子集。

C语言的额外功能基本上都是通过函数库来提供,很多特性,我们以为是C语言的,实际上我们错了,那是ANSI C规定标准库函数必须提供的。

3.一个非常“低级”的高级语言

C语言能操作硬件,这让C语言在操作系统的开发,嵌入式系统等底层相关开发方面魅力十足,长盛不衰。当然,这也带来了很多语言的天生缺陷和烦恼,比较难理解。

4.C =汇编++

道理同上,C语言虽然难学,但比汇编好用,基本上程序效率和汇编一致,当然是硬件相关开发的不二选择。

5.不完美的C语言,完美的程序员

很多文献说“信任程序员”是C语言设计时的一个基本原则,而我的幽默理解是C语言设计者最后说:我就能做这样多,剩下的你们看着办吧!

6.告别语言崇拜,专注问题解决

小的时候我非常喜欢数学,喜欢它的原因我现在想想可能有两点非常重要:一个是数学的美,另一个是解决数学问题需要的工具非常简单,白纸和铅笔。

后来我爱好程序设计,可能也是这两个原因的延续:程序设计的美;简单的工具:C和PC,它们能让我很快能见到结果,这是人生智力延伸的最好体验。

因为喜爱,所以有些封闭。我也是大学宿舍里编程语言优劣的争论者——那个时候没有网络,所以还只限于几个同学之间的讨论。

不过,世界在变化。毕竟我们也有了很多编程语言和开发工具的体验,C/C++,特别是C语言,毕竟是手工编程时代的最好代表。C语言的设计原则,“信任程序员”,一定会被“给程序员最好的帮助,让他们专注于解决问题”所取代。