Unix C 编程问题精粹( 二 )


....(欢迎您来充实此处空白)
....好了,在任务中,又有哪些细节呢?[]我是不是葛郎台?
不要那么吝啬.在源程序中加入详尽的注释以使自己和他人即使在许多年以后仍能读明白它是什么样的程序.
用注释行分离各个函数.[]删除不需要的代码时要小心.
一个好建议是:使用#ifdef DEL,而不是简单地注释掉甚至是粗暴地直接dd.如果你是使用/* ... */,但一旦要删除的代码有很多行,或注释中以有注释时,这就可能不那么好使了.[]如何给源程序文件命名?
表现特色且不与任何原有应用名相同.一个简单地方法就是试试看,系统有什么样地反应?[]一次只修改一个地方.[]一次只编写一个单一功能的函数 。[]编写通用程序.
只有当程序编写完,并且完成了所需要的性能要求之后,再反过头来优化该程序.[]不要使用a.out作为结果.你大可以使用与源程相同的可执行文件名.[]是否一定要用VI编辑?
LINUX下有许多专用编程编辑器.它们能使你有更高的效率和更低的低级输入错误,但我还是要劝你至少要熟练掌握VI.毕竟VI遍地开花.[]协同作业.请相信,你不是在孤军作战.因此,你有必要熟练掌握一些其它的工具.如
....
....(欢迎您来充实此处空白)
....
第四章:使用lintlint没有你想象中的那样糟糕.相反,一旦源程序形成了没有LINT错误的形式,将很容易保持下去,并享受到如此而带来的好处.[]在cc(gcc)之前就应使用LINT.
lint是一语法检查程序,对于这个多嘴的婆婆来说,你应有足够的耐心.虽然你知道自已在干什么,但在CC之前使用LINT总是一个好习惯.[]lint有哪些特色?
在编译之前使用lint的重要原因是LINT不但能发现ANSI C中的语法错误,而且也能指出潜在的问题或是难于移植于另一机器的代码问题.除了能指出简单语法错误之外,LINUT还能基于以下原因指出另外的错误:
A.无法达到的语句.
B.没有进入循环.
C.没有被使用的变量.
D.函数参数从未使用.
E.没有赋值之前自动使用参数.
F.函数在有些地方有返回值,但在其他地方不返回.
G.函数调用在不同地方使得参数个数不同.
H.错误使用结构指针.
I.模糊使用操作符优先级.
呵呵呵,挺有用的吧![]如何控制LINT的输出?
有时LINT会有一大屏一大屏的警告信息.但似乎并未指出错误.为了找出潜在的错误则需费心费力地浏览这些大量的警告信息.
但如果你的程序会分出几个独立的模块,在初级启动LINT时不要用可选项.当对这些模块进行更改或扩充时,可以忽略与代码无关的某些警告.为此可用以下选择项:
-h 对判别是否有错,类型是否正确不给出启发式测试.
-v 不管函数中没有定义的参数
-u 不管被使用的变量和函数没有定义或定义了但没有使用.[]干脆,在程序中插入指令来影响LINT运行.它看样子有些像注释.
/*NOTREACHED*/ 不可达到的代码不给信息说明.
/*VARARGSn*/ 函数的变量个数不作通常的检查,只检查开始n个参数的数据类型.
/*NOSTRUCT*/ 对下一个表达式不作严格类型检查.
/*ARGUSED*/ 下一函数中,不给出没被使用参数的警告信息.
/*LINTLIBRARY*/ 置于文件的开头,它将不给出没被使用函数的警告信息.关于LINT的更多用法,请用man lint来获知.
第五章:使用make[]什么是make?Unix(Linux)是一个天生的开发平台,我为此感到高兴.make是一个强力的工具.它能自动跟踪相互依赖的源代码块并组成一程序,使得很容易建立一可执行程序.Make就是这种有依赖关系的部分和代码之间所作的规格说明.
[] 所有的程序都要使用make?
是的.尽管你只有几个简单的模块,但你需要有一种结构来支持它从简单走向复杂.除非你的程序已经盖棺定论.[]Makefile由哪些组成?
Makefile由以下几个部分组成:注释.

推荐阅读