- 论坛徽章:
- 2
|
本帖最后由 gvim 于 2010-11-20 02:33 编辑
原来还有出处啊,乱七八糟看了半天原帖,我个人觉得没那么复杂吧这个问题
冗余,是去掉之后仍然可以和非冗余代码一样正常工作,表现一样的业务性。如果某段代码去掉之后由于人为原因造成和非冗余代码不一样的业务性,那我认为就不是冗余。
一般的软件系统,冗余我觉得没太多必要。把操作需要的前置条件写在接口定义,或者调用上下文,或者注释在函数头部,或者用适当的标识号重点突出,把操作条件明显话可以避免很大部分冗余。
相信大家都有读过man手册和代码,数据结构里面的上锁条件,函数的上锁条件等等,写在声明后面不就完了?什么成员数据操作的时候需要什么锁;调用函数时如果有特别需要注意的,函数的头上或函数的man 手册会说明调用时需要什么锁条件,比如是否caller上锁,caller是否必须持有其它什么锁,调用完成后callee是否释放锁。。。
要我来做牛牛说的第一个事情,我会这样做:- ...
- ...
- ...
- static int arr[XXX]={0};
- ...
- ...
- ...
- /*
- * NOTE: arr在for操作之前需全部为0,该工作由callee负责完成 // (或caller完成)
- */
- static int somefunction(void)
- {
- ...
- ...
- // 如果是callee满足条件,是必须的代码;如果是caller满足条件,就是不必要的冗余代码。
- memset(arr, 0, sizeof(arr));
- /* NOTE: 以下代码要求arr数组的成员必须都是0 */
- for (i=0;i<XXX;++i) {
- ...
- }
- ...
- ...
- }
- ...
- ...
复制代码 另外,看到原帖后面说传NULL什么的之后的一系列东东,我认为选择是否进行合法性检查是函数自己的事情,可以做也可以不做完全相信caller,可以进行合法性判定也可以进行有效性判定,当然给系统带来负载:不判定(=0)<合法性<有效性。
不看函数接口定义,不看函数头上的注释说明,不按规矩调用的,属于项目管理里面处理的事,抓住没有任何辩解,扣工资让他记住调用函数的时候必须满足调用条件,就像物理公式不能乱套,厕所不能乱进一样。
PS:抱怨一下CU的代码编辑功能,排版难看。。。调整了几次 |
|