这段文字原本的开头:
最近写了一段代码不目的是为了判断ipv4报文是否为组播,
原始的代码写的是
if ( mac[0] !=0x01 || mac[1] !=0x00 || mac[2] != 0x5e )
continue;
而且这样的判断有两处,这样一处圈复杂度就是3(就是3个分支),两处就是6,而且整个函数的圈复杂度超过了15,这样阅读起来就比较费劲。
这种情况有两种整改办法,
- 将逻辑表达式命别名,先转化为数字运算,然后再做逻辑判断。
- 使用区块比较。
** 这样写下去,放大了细节,偏离主题 。**
最近写了一段代码,为了阅读方便需要进行一块内存的比较。字符串的比较函数还是记得都很清楚的。我需要使用的是内存比较,于是就在linux 服务器上执行了 man memcmp 命令查出对应的函数原型以及说明:
然后我很得意的在替换的地方写上了 memcpy,过了半天,代码整改完成,我开始找人代码检视,准备上库。
这个时候同事问我,你为什么使用内存拷贝(memcpy)而不是内存比较(memcmp)?
我也很想知道,我明明一直想的是内存比较函数,而且对于这个函数想再确认一把,还特地查询了声明以及用法,为什么到最后写上去的时候就写成了内存拷贝函数了?
还记得在高中的时候我也犯过类似的错误,明明答案上勾选的是D,在选择的结果上写的是B,这让我很是疑惑?当时在干什么,心思都跑到哪里去了,可以确定的是:我当时没有分心,要知道,高中时候的考试我是很看中的,做题的时候,大部分时间都是不够用的多一些,分心去想别的,不可能的。
那么我为什么会犯那个低级错误呢?
对于这个错误没有深思熟虑,导致频频重犯。
我有没有在某一个领域改掉过犯低级错误的毛病呢?的确是有的
初中时候的数学考试。
那个时候特别喜欢数学,在做题或者学习中有一种快乐感,然而,考试成绩平平。老师见我平时上课的时候挺活跃的,可能有些不理解吧,于是在一个下午,把我叫到办公室里面,“你来咱们分析一下你的试卷。”我心里战战兢兢的,以前我总是安慰自己,这些题我都可以做到,但是我拒绝分析其中的原因。
考试时候的每一道数学题,我都会做,在想到最关键部分之后,头脑觉得特别兴奋,然后就有点想要放松一点的情绪在其中,活着是觉得自己做对了,而在此时要么是一个小点没有注意到,要么是沉浸在兴奋的思绪中,没有投入到目前的状态,导致最终的错误。
在后续的考试数学前,我还是有种莫名的兴奋,同时不断告诫自己的,找到思路之后,平静面对接下来的步骤,数学考试的结果立即就进入前5了。
犯了低级错误并不可怕,可怕的有两点:
- 对于犯下错误产生了消极认识,认为自己不行。(由于平时对数学的喜爱,而且平时做的不错的内在动力,没有让我陷入这个误区。)
- 知道那些低级错误不是你的水平,但是你不去面对它,不是想办法避免,他们会如影随形,久而久之,你会对自己的水平产生怀疑的。