Defensive programming 是程序员一般使用的编程方式,也就是对所有有可能(也许是在设计逻辑上没有可能出现的值)的出现的错误进行处理。但这种编程方式会在调试阶段隐瞒错误。要记住,我们编写程序的目的是编写无错的代码,是要让所有的错误不应该再发生,而不是每次去安全处理发生的错误,所以Defensive programming和编写无错程序的理念有点矛盾。但 Defensive programming 也是有价值,对所有这些错误做以防万一的处理。
所以我们程序员在编写代码时,既要使用Defensive programming 来安全处理错误,也要让错误尽早暴露出来,可以一方面用Defensive programming 进行编码,一方面在错误发生时用assert报警。这样就可以在调试版本中对错误进行报警,而在发布版对错误安全恢复。
要对程序中不可能发生的情况进行assert检查,可以尽早暴露错误。
assert应该用来检测程序在任何环境下正常工作都不可能发生的错误,只汇报错误,不预防不更正错误,对于那些在正常使用有可能出现的异常(如malloc失败),则要用防错程序处理。