高质量程序设计指南:C++/C语言
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1 程序设计语言

程序设计语言实际上就是一套规范的集合,主要包括该语言使用的字符集、直接和间接支持的数据类型集合、运算符集合、关键字集合、指令集合、语法规则,以及对特定构造的支持,例如,函数(过程)的定义、抽象数据类型的定义、继承、模板、异常处理等。这些内容就是一个语言的构造或者说特征集。可见,语法只是语言的一部分,它指导程序员如何把语言的各种构造组合起来形成一系列可以解决实际问题的可执行命令,这就是程序。一种语言对于它的各种构造的支持是通过各种关键字集合及其语法规则来实现的。

就拿标准C语言来说,它支持函数设计,但是语言本身并没有提供任何现成的函数可以直接调用(你可能认为sizeof是一个函数,其实它是一个运算符)。它支持用户定义struct、union、enum等,但是它本身并没有提供任何具体的struct、union、enum类型供程序员使用。

有人会问,我们学习C语言的时候总是首先学习它的“格式化I/O”,以便看到自己程序的运行成果,难道“格式化I/O”不是C语言的组成部分吗?

确实不是!

标准C语言没有提供I/O的实现,只是定义了标准的I/O函数接口,所有的I/O工作都是通过库函数来完成的,在这一点上它不同于BASIC。标准C++语言继承了C的I/O库函数接口,并且重新定义了自己的面向对象的I/O系统。

现在你该明白了,I/O系统并不是C++/C语言本身的组成部分,函数库和类库也不是它们的组成部分。那么为什么要提供它们呢?实际上应该说是语言实现(参见本章3.2节)按照标准接口提供了它们的一个实现版本,算是语言实现的附加产品。它们都是用语言支持的基本特征开发出来的(有的直接使用了汇编语言),目的是方便程序员进行程序设计,使他们从烦琐的底层硬件操作中解脱出来而专注于高层的业务逻辑处理。

作为一种语言,它必须定义它能够支持的所有合法的语法结构及其组合应用,而语言实现同样要能够接受所有可能的合法的代码。但是对于面向实际应用的程序员而言,完全没有必要学习和使用那些过于复杂的、高难度的和罕见的语法结构及其组合。就像C++之父Bjarne Stroustrup说的那样:“你使用一个语言特征是因为你需要它,而不是因为它存在”。

学习一门程序设计语言,并不需要掌握其全部的语法,关键是要学习使用语言来解决实际问题的方法。例如,C语言的格式化I/O非常复杂,有不少程序员努力去记住那么多的格式控制符号,其实完全没有必要!还有C运算符的优先级和结合率,也没有必要把它们完全搞清楚,遇到这种问题时只需要按照自己要求的计算顺序多使用“()”就可以解决。很多人在学习程序设计语言时常常沉迷于语法,这是学习的误区!

如果记不住很多语法细节,你可以查阅手册,但是程序设计的道理、解决实际问题的方法是没有地方可查阅的。如果你所掌握的语法和程序设计方法能够高效地解决实际工作中的各种问题,那么表明你已经掌握了这门语言。