提前认识软件开发(3) 学校C语言教材的缺陷2015-01-24我在走出校门的时候非常的“轻狂”,认为自己在学校里面已经学得够多了,工作就只算是小菜一碟。但在工作中屡次碰壁之后,我才发现自己当时的想法是多么的天真。我们踏上工作岗位,一切几乎都要从零开始。对于大家“非常熟悉”的C语言来说,我们在学校里面学的非但不够用,而且在很多地方对大家还有“误导”的作用,让我们认为编程就是那么一回事了。我举谭浩强老师写的《C程序设计》的“函数”那一章的某程序为例子加以说明。程序如下:
#include <stdio.h>void main(){float fac(int n);int n;float y;printf("input an integer number: ");scanf("%d", &n);y = fac(n);printf("%d!=%10.0f
", n, y);}float fac(int n){float y;if(n<0){printf("n<0, dataerror!");}elseif(n == 0 || n == 1)f=1;elsef=fac(n-1)*n;return(f);}
对于以上程序,至少存在以下问题:第一,变量命名不规范,而且没有初始化。对于该程序,main函数里的变量n、y,fac函数里面的变量f的命名均不规范,不能让人一眼就看出它是什么意思、要做什么操作。这对于一小段程序来说,影响还不是很大,但如果代码行数达到数千行,那么阅读起来就比较的费力。另外,以上说的三个变量只是定义了,并没有初始化,这在实际项目中也是不允许的。第二,函数的命名不规范,且没有在主函数开始之前进行声明。本程序中的fac函数表示什么意思?如果你没有看程序开始之前的文字,那么只有通过阅读函数里面的代码才能知道。在实际项目中,函数命名非常的重要,因为一般涉及到函数个数较多,如果不能通过函数名称来了解其作用,而必须通过阅读代码才能获悉,那么工作效率是很低的。此外,我们一般不在调用该函数的函数的内部来对被调函数进行声明,而是应该将声明放在外部,最好新建一个头文件来对程序里面出现的函数进行声明。第三,程序代码排版不工整,“if…else”语句书写不规范。在fac函数中,存在排版不工整的情况。第一个if语句下面的大括号应该与“if”的“i”保持在同一列上,第二个“else”应该与第二个“if”保持在同一列上,“f=1;”和“f=fac(n-1)*n;”应该再缩进4个空格。另外,“if”和“else”下面的执行语句不管有多少行,都应该用“{}”括起来,以方便阅读。第四,程序注释过少,函数开头没有注释。一般说来,在程序的关键语句的前面或右边,都应该添加适当的注释,这对程序的理解有辅助的作用。函数fac的前面应该加注释,说明此函数的功能、输入/输出参数、返回值、修改记录等。在整个程序的开头处,也要添加版本信息、修改记录等注释信息,以方便日后查阅。第五,程序中出现了“printf”、“scanf”和“main”函数。这是大家都习以为常的,但在实际的项目中,几乎不可能出现这三个函数。因为公司都有自己的开发平台,而且代码都达到数千行,甚至上万行,大部分都不是基于VC开发的,你在哪里去输入,又在哪里去看输出呢?我一进公司,最开始看到程序,就想去找“printf”、“scanf”和“main”,但这是徒劳的,因为根本就没有。关于输入/输出,开发中会有专门的消息处理流程来处理,大家需要知道的就是一个完整的程序不一定非要有上面的三个函数。短短的几十行代码,就出现了这么多大家“没有想到”的问题。看到以上的分析,也许你会很惊慌:我以前的C语言难道是白学了?非也!我举这个例子,一不是为了亵渎经典,二不是为了给大家当头一棒。我只是想说明,对于C语言,我们还有很多不知道的东西,即使是自己知道的,也与实际工作存在较大的偏差,大家要虚心学习。我和大家一样,也经历了最开的惶恐阶段,而后才逐渐去改变了自己“根深蒂固”的观念。“知错能改,善莫大焉”啊!雄关漫道真如铁,而今迈步从头越!From:csdn博客 周兆熊