代码理解\搜索的障碍

简介

这里整合所有阻碍代码搜索的实例。原因,及改进建议。

注释的意义

注释的意义,就不再说了。这里只是记录一下条目。再次强调,需要多加注释,同时要确保注释的正确性。

注释的障碍

举例

/* These elements must be at the end, see alloc_skb() for details.  */
sk_buff_data_t		tail;
sk_buff_data_t		end;
unsigned char		*head, *data;

比喻的意义

在计算机行业,有很多词汇,概念都是从其他领域类比,比喻过来的。而且以西方的事物比喻的为多,所以对于东方人来说,有时候虽然通过翻译可以大体了解比喻的含义,但是没有亲身体会过这种事物,怎么都有一种隔膜存在。

比喻的障碍

理解的意义

代码阅读无可避免;只有理解了代码,才能对问题的根因进行分析。

搜索的意义

那为什么要着重说搜索呢?原因是,当前开源软件,及github的兴起,预示着代码就像星辰大海;如果遇到问题,我们想搞懂其中的逻辑,要一行一行的去看,非常的耗时,而且效率低。如果使用搜索,就可以完成,专注问题点的代码的展示。
这个搜索,是问题处理场景下,一定会用到的技能;如果可以很好的辅助代码搜索的代码编写技巧,可以很好的为问题解决提供帮助。而不好的软件设计,编码风格,会导致这个搜索技能,无用武之地。

理解的障碍

参数传递的繁杂的映射

比如接口提供了一个参数名称是:gfp_t gfp_mask,也就是这个接口的作者,希望传递进来也是一个gfp_t的类型的数据,而且名称上也要能对应的上;
但是如果调用者这样调用;
skb = fff(sk->sk_allocation);
其实丢代码阅读者来说,脑子里需要一个映射关系,就是sk_allocation的含义,就是gfp_t。但是从字面上,含义相差了一段距离。

struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
struct proto *prot, int kern)
{
有些函数调用使用的名称是:priority;
到目前为止,有三个符号需要映射到一个含义:gfp_mask, sk_allocation,priority;
而且priority,作为一个具有普世意义的词,需要特立化。

搜索的障碍

成员变量重名

这个重名,不是说在一个结构体或者一个类里,重名。而是多个结构体,或者多个类里,具有相同名称的成员变量名称。这就为检索搜索结果设置了一个非常大的障碍。
举例:

  • 公司有一个模块使用了大量的单例对象;而且设计的类又多;实例的名称统一都命名为:_mInstance;要是去搜索代码,发现,根本无从下手;海量的_mInstance;
  • Kernel源代码里的普通含义的成员变量,比如:len/gso_size/func, 等等,好多个结构体都有这种普通意义的变量,搜索起来也是非常的费劲。如果按照模块搜,不能保证,搜索的全局性;如果不按照模块搜,又有好多不在关注点内的捣乱分子。

成员变量重名的改进建议

将普适的变量名,特有话:比如在len前加 类名;clas_name_len;

猜你喜欢

转载自blog.csdn.net/qq_36428903/article/details/126535583