对于C语言,有人认为他已落伍了.对于这个问题,仁者见仕,智者见智.的确,C 比C有更强大的诸多优势.但C 是建立在C之上的.这也是Herbert Schildt所著的<>在全世界畅销不衰的原因.更何况,要深入学习LINUX就必需要有相当的C功底.(这也是我搜集整理本文的根由:-)
现结合个人在编程中的体会,为使新手少走弯路,为老手锦上添花,因此无论您是使用C或C 编程,也无论您是程式设计的初学者还是成熟的专业人员,均会发现,本文将会对您有所收益.当然,我尽力写得清楚易懂,又不古板.
我爱C.(正如世人爱上帝相同:-)..


第一章:前言


对于C语言,有人认为他已落伍了.对于这个问题,仁者见仕,智者见智.的确,C 比C有更强大的诸多优势.但C 是建立在C之上的.这也是Herbert Schildt所著的<>在全世界畅销不衰的原因.更何况,要深入学习LINUX就必需要有相当的C功底.(这也是我搜集整理本文的根由:-)
现结合个人在编程中的体会,为使新手少走弯路,为老手锦上添花,因此无论您是使用C或C 编程,也无论您是程式设计的初学者还是成熟的专业人员,均会发现,本文将会对您有所收益.当然,我尽力写得清楚易懂,又不古板.
我爱C.(正如世人爱上帝相同:-)..

您能够在forum.linuxaid.com.cn上获得此帖的文本.而其HTML版本正在赶制之中......
假如您是在一个月之后看到本文,那么此文或许已更新了:-)


第二章:约定

专业的源程书写风格.
先看看世界级C大师的源程书写风格.如 Steve Maguire 就有许多不错的建议.

[]倡导使用易于理解的"匈牙利式"的命名约定.
任何的字符变量均以ch开始; 如: char ch_****;
任何的字节变量均冠以b; 如: byte b_****;
任何的长字变量均冠以l; 如: long l_****;
任何的指针变量均冠以P; 如: char *p_ch_****;
建议类型派生出的基本名字之后加上一个以大写字母开头的"标签".如:
分析 char **ppchMydata;
其让人一眼就能看出他代表一个指向字符指针Mydata的指针.
"匈牙利式"命名的最大不足是难念:-(( .但相对于不是总统演讲稿的C源程来说,这又算得了什么?想想看以下的数据命名:
char a,b,c;
long d,e,f;
.
.
.
(反正我是不会再看下去了...)

[]倡导规范书写.
假如您思如泉涌,而不去也不及顾虑书写格式,那也没关系.在将其交出去之前,用cb命令格式化您的源程.虽然源程的格式不会影响到您编译结果的正确性,但切记,能让其他的程式员能轻松地阅读他.否则没人会理您的.
关于cb命令的更多用法,能够用man cb来参考其手册页.
当然除了cb之外,更有更多更好的.但cb是您在任何UNIX(LINUX)上都找得到的.更何况他并不差.


第三章:开始任务

开始任务之前,先做个深呼吸!

[]其他文档您准备好了吗?
您是不是除了C源程之外一无任何了吗?兵马未动,粮草先行.您必须先清楚该程式所要完成的功能.在开始写程式之前,对程式的功能应有规范说明.书写规范书和确知程式功能的一个方法是先编写相应的操作手册.假如您是一人单干,劝您首先写需求书.切记切记,这对您意味着事半功倍的大好事.
一个实例:我计划为本行的信贷子功能模块打一个补丁.我用10周的时间用来写规划书,需求书,操作流程,使用说明等等文档.之后用2周的时间编写程式,在初步测试(1周)后递交给各信贷部门测试使用.然后根据反馈的信息再更改相应文档,并根据文档修改源程.6个月后发布正式版.

[]一定该遵循ANSI标准吗?
假如您仅使用ANSI的标准首标文档,恭喜您,您的程式有着全世界范围内的广泛支持和兼容.光明无限.但您必须在通用和专用之间做出取舍,对不起,我帮不了您.
我的原则是:核心用ANSI,界面按需而取.这样在转换平台时仅需另编用户界面而已.实用至上嘛.
附:ANSI 标准C头文档


是不是很寒酸?

[]再续前缘?
在得到新任务之后并在开始该新任务之前应马上回想有哪些是曾拥有的.旧调重弹远比另起炉灶来的高效和环保.

[]是否该有自已的库?
我的答案是应该有自已的特色库,并和ANSI兼容.和3.8不同的是,您仅需在源程式之后附上自已的专用库就能够了.其次在有了自已的库后,源码会很精炼的.不用去羡慕别人了吧.

[]要学会条件编译.注意您的平台特性.(高手的标志?)
除非您确定您要写的程式是在某特定的OS特定的硬件平台而量身定做.否则应注意数据类型的长度,精度都是不同的,不要想当然.有时甚至是不同的编译器的差异都要考虑考虑.

....
....(欢迎您来充实此处空白)
....

好了,在任务中,又有哪些细节呢?

[]我是不是葛郎台?
不要那么吝啬.在源程式中加入详尽的注释以使自己和他人即使在许多年以后仍能读明白他是什么样的程式.
用注释行分离各个函数.

[]删除无需的代码时要小心.
一个好建议是:使用#ifdef DEL,而不是简单地注释掉甚至是粗暴地直接dd.假如您是使用/* ... */,但一旦要删除的代码有很多行,或注释中以有注释时,这就可能不那么好使了.

[]如何给源程式文档命名?
表现特色且不和任何原有应用名相同.一个简单地方法就是试试看,系统有什么样地反应?

[]一次只修改一个地方.

[]一次只编写一个单一功能的函数。

[]编写通用程式.
只有当程式编写完,并且完成了所需要的性能需要之后,再反过头来优化该程式.

[]不要使用a.out作为结果.您大能够使用和源程相同的可执行文档名.

[]是否一定要用VI编辑?
LINUX下有许多专用编程编辑器.他们能使您有更高的效率和更低的低级输入错误,但我还是要劝您至少要熟练掌控VI.毕竟VI遍地开花.

[]协同作业.请相信,您不是在孤军作战.因此,您有必要熟练掌控一些其他的工具.如


....
....(欢迎您来充实此处空白)
....


第四章:使用lint

lint没有您想象中的那样糟糕.相反,一旦源程式形成了没有LINT错误的形式,将很容易保持下去,并享受到如此而带来的好处.

[]在cc(gcc)之前就应使用LINT.
lint是一语法检查程式,对于这个多嘴的婆婆来说,您应有足够的耐心.虽然您知道自已在干什么,但在CC之前使用LINT总是个好习惯.

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!