问题
- 在写C程序时,领导经常要求注意个人的代码质量,因此我经常看到别人的代码中出现:函数传参,代码中对指针参数进行非NULL判断,这是有必要的,但是有些情况,我有些疑惑,例如:全局结构体保存程序配置,函数调用时传递该结构体指针,每个被调用的函数都判断一下该结构体是否为NULL,为NULL则返回错误。
感想
- 对内要信任,对外要怀疑
- 数据是从内部 传递的,在代码内部,不需要过多的判断 (信任不是无条件信任,看是否需要,例如变量是否会改变),不需要判断每个变量是否为空,这样性能会丢失(c 语言就没有判断边界),所以函数定义需要说明:哪个参数不能为空,或者需要在哪个范围内
- 数据是外部传过来的,需要充分判断。
- 对内信任的目的是减少内耗,加快程序性能。
- 冗余的判断,虽然保证了程序不会崩溃,但是如果没有对返回进行处理,也可能掩盖了异常情况,例如:将某个函数返回值传递给另外一个函数,如果该返回根本不可能为NULL,但是却返回了NULL,在另外一个函数中做了非NULL判断后,但是没处理返回值,就忽略了真实的错误。