[读书笔记]多任务下的数据结构与算法 序章
Contents
序章部分都是周先生之前的一些经验之谈,感觉在实际编程过程中还是比较有用的,程序里经常遇到这么些问题。
1、参数校验
参数校验,大部分函数开始和使用传进来的参数的都是都是需要参数校验的。有时候不知道该不该校验,怎么样才能划分这部分工作是函数使用者的工作,还是函数设计者的工作呢。一直比较迷糊吧。
*对于在大循环里调用的函数,不需要再函数内校验。比如链表的遍历,如果校验的话,每一个链表的节点都需要校验,那么函数的效率就要大幅度下降了。 *底层的函数调用频度都比较高,一般不校验?这个为什么不校验了,是因为调用频度高? *如果在一个函数中多次使用这个底层函数,实际上只要在调用函数之前,一次性校验一次就行了。而不需要在底层函数中进行校验,否则多次校验,影响效率。 *调用频率低的校验,和上面一条类似,调用频率低了,自然自带校验好。 *执行时间开销很大,参数校验对于函数运行时间来说忽略不计。 *可以大幅度提高软件的稳定性的。
2、return语句的使用
函数对于return语句的使用,多次使用该语句的话,要对资源进行回收完全,但实际情况中,经常会忘记写一些,这样就造成内存泄露比较容易发生。但是你不用return语句的话,一般写程序条件过多,分支过多,读程序的困难就比较大的提升了。
*参数校验失败后直接return,并对资源回收 *函数内不同的出错,要使用不同的return来表示不同的出错原因 *函数内部同类出错,尽量使用同一个return语句,尽量不要让两个return返回同一个返回值
3、while循环和for循环的问题
死循环时,在pc-lint中会检测成错误?
普通时候,循环变量在循环中改变的话,用while,在循环后改变用for
4、if语句多个判断的问题
需要校验多个参数时候,把条件放在一个if中,这要就少了return。当然,这些条件要产生不容的return结果的时候,就需要分开了。
5、goto语句的使用
我看周先生在一些代码中还是使用的一些goto语句的,根据之前的描述看,就是运用在出错的时候,跳转到资源回收时,比较方便使用。
但是goto的语句使用有一些原则goto语句只能goto到同一函数内,而不能从一个函数里goto到另一个函数里使用goto语句在同一个函数内goto时候,goto的起点应该是函数内一小段功能结束处,目的地是一小段功能开始处,而不是乱跳不能从一段复杂的执行状态中的位置goto,这样很容易遗漏东西。
6、swich…case if else if区别
一般swich效率更高些,但是实际情况是,每一个条件存在不同概率时候,把概率大的放最前的话,效率最高。
7、任意数据类型的处理方式 C
数据类型几乎存在无限种组合了,c++使用模板,而在c语言中使用void指针是很不错的方法。其实在C++中也经常用到void指针,因为可以指向任意类型的数据。C使用void*时候不知道适合该数据结构的一些操作,所以需要使用回调函数,来传进这些操作。
*数据的比较 *数据的资源释放 *数据的访问 *数据的拷贝 *数据的一些其他计算操作
例子
*typedef void (*DESTROYFUNC)( void *pArgs);