关于书籍:一本讲述C语言的书,自出版以来,历经14载,它一直都被各个书评站点(或书评人)列入“重点推荐”的清单中。尤为夸张的是,14年来,在它的18次印刷版本中,除去第二次印刷稍微修改过一些问题,以后的16次印刷,我们居然发现它的内容没有丝毫的变更!!!对于技术书籍,我想其精确性与权威性也算是奇迹了吧。
关于作者:Andrew Koenig是AT&T大规模程序研发部(前贝尔实验室)成员。他从1986年开始从事C语言的研究,1977年加入贝尔实验室。他编写了一些早期的类库,并在1988年组织召开了第一个完全意义上的C++会议。在ISO/ANSI C++委员会成立的1989年,他就加入了该委员会,并一直担任项目编辑。他已经发表了C++方面的100多篇论文,在Addsion-Wesley出版了C Trap and Pitfalls,还应邀到世界各地演讲。他的妻子Barbara Moo现任AT&T网络体系结构部门负责人。在1983年加入贝尔实验室不久,她开始从事Fortran 77编译器的研究工作,这是第一个用C++编写的商业产品。她负责AT&T的C++编译器项目直到AT&T转让出软件开发业务。她还负责指导SIGS会议、Lund技术学院和Stanford大学。Andrew Koenig和Barbara Moo堪称C++研究领域的“第一神仙眷侣”,他们不光有着多年的C++开发、研究和教学经验,而且还亲身参与了C++的演化和变革,是对C++的变化和发展起到重要影响的人。他们两人还曾经合著了Accelerated C++: Practical Programming by Example。
作者的第一个C程序:
#include <stdio.h>
main()
{
printf("Hello world");
}
执行结果却如下所示:
% cc prog.c
% a.out (注意,现在应该使用./a.out来运行这个默认的gcc编译出来的a.out了)
Hello world%
这个结果怎么看起来和自己很多时候的那么相似呢,因为没有加上换行符'\n',所以那个unix提示符号'%'紧跟着world出来了。以后自己也要注意。
第二个C程序例子,书上的是部分代码,我将代码补全如下:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
int a[10];
for (i = 0; i <= 10; i++) {
a[i] = 0;
printf("a[%d] = 0\n", i);
}
exit(0);
}
使用gcc编译(gcc -o array array.c)并运行这个程序,运行发现会是一个死循环!虽然我知道应该是i < 10,9是数组的界限,但是却不知道为什么i <= 10的时候会是死循环,这个让我提起了兴趣。我尝试这使用gcc -Wall -o array array.c来编译程序,以为gcc会有警告,却发现任何警告信息!答案作者是在第三章3.6节讨论的。当然,我要继续往下看。
我很赞同作者提出的"程序设计错误实际上反应的是程序与程序员对该程序的'心智模式'两者的相异之处",赞同Howard Gardner在《心灵的新科学》(The Mind's New Science)中的观点:人们的心智模式决定了人们如何认识周遭的世界。
从较低的层面考察,程序是由符号(token)序列组成,犹如一本书是由一个一个的单词所组成的一样,将程序分解为token的过程,称为"词法分析"。
组成程序的这些token,又可以看成是语句和声明的序列,犹如一本书可以看成是由单词进一步结合而成的句子的集合一样,符号(token)和单词如何组成更大的单元,组成什么样的语义,取决于语法细节,理解了语法细节,还需要理解语义细节才行。
程序的连接,预处理等,也是现在我的认知空白,接着看书吧。

没有评论:
发表评论